본문 바로가기

전체 글

(596)
DC (Section 18) 참고> blog.naver.com/tipsware/220983425334 1. DC(Device Context)에는 여러 가지의 GDI Object(Pen, Brush, Bitmap, Font ...)가 연결되어 있는데 현재 사용중인 GDI Object를 확인할 때는 GetCurrentObject 함수를 사용하면 됨. -> ex) ::GetCurrentObject(h_dc, OBJ_BITMAP); (:: 는 Win API 네임스페이스를 의미) 2. 윈도우와 연결된 DC에서 비트맵 정보를 얻게 되면 비트맵의 크기가 클라이언트 영역의 크기와 일치하는 것이 아니라 윈도우 전체 크기(캡션, 테두리 영역 포함)와 일치함 -> 따라서 윈도우의 크기를 사용해야 할 경우, GetWidnowRect 함수를 사용할 필요 ..
GDI (Section 16) 참고> blog.naver.com/tipsware/220986173576 Bitmap과 GDI 그리고 DC (Feat. GDI Object) 한동안 제가 비트맵에 대한 블로깅을 참 많이 했는데, 그 이유가 바로 GDI와 DC를 설명하려고 했던 것... blog.naver.com 1. GDI(Graphic Device Interface): Windows 운영체제가 그래픽 장치에 대해 프로그램이 독립성을 유지할 수 있도록 만든 기술 -> Windows 운영체제는 그래픽 장치에 대해 프로그램 소스 코드가 독립성을 유지할 수 있도록 그래픽 장치를 하나의 모델로 추상화시킴 2. GDI Object: Windows 운영체제는 그래픽 장치를 추상화 시키기 위해서 그리기에 필요한 요소들을 여러 개의 객체로 구성하고 장..
BITMAP 구조체 (Section 15) 참고> blog.naver.com/tipsware/220983334717 BITMAP 구조체 대하여 BITMAP 구조체는 비트맵의 폭, 높이, 색상 형식 그리고 비트 패턴에 대한 주소를 저장할 수 있습니다... blog.naver.com 1. BITMAP 구조체는 비트맵의 폭, 높이, 색상 형식 그리고 비트 패턴에 대한 주소를 저장할 수 있음 (wingdi.h) -> bmType: 비트맵 형식 변수, 항상 0을 넣어주어야 함 -> bmWidth: 비트맵의 폭(pixel 단위) -> bmHeight: 비트맵의 폭(pixel 단위) -> bmWidthBytes: 가로 방향으로 한 줄에 사용되는 바이트 수 ex) 비트맵 폭이 200dlrh 32비트(4바이트) 색상이라면 한 줄에 필요한 크기는 200 * 4 =..
Bitmap 생성 (Section 14) 참고> https://blog.naver.com/tipsware/220985029852 비트맵 생성하기 : Win32 프로그래밍 관련 전체 목차 http://blog.naver.com/tipsware/2210599771931. 먼저 봐야 할 내용들... blog.naver.com 1. 비트맵 생성 => CreateBitmap() => CreateBitmap 함수의 4번째 인자인 색상 수에 특정 값을 고정해서 사용하면 프로그램의 호환성이 떨어짐. 왜냐하면 그래픽 장치마다 색상 수가 다를 수 있고, 같은 그래픽 장치라 하더라도 사용자가 운영체제 설정에서 색상 수를 다르게 설정해서 사용할 수 있기 때문에 주의해야 함. 이 경우 CreateBtimap()은 DDB형식의 비트맵을 생성하는 것임. 그래서 Creat..
Bitmap (Section 13) 참고> blog.naver.com/tipsware/220984197835 비트맵에 대하여 : Win32 프로그래밍 관련 전체 목차http://blog.naver.com/tipsware/221059977193 1. 컴퓨터의 화면 출력 ... blog.naver.com 참고> genesis8.tistory.com/37 리틀 엔디안 VS 빅 엔디안 먼저 둘을 비교하기에 앞서 엔디언이란 무엇인가? 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 genesis8.tistory.com 1. 모니터에 출력되는 영상은 '점(pixel) 단위'로 구성되어 있음 2. 해상도(resolution) => 컴퓨터의 그래픽 장치..
Windows Message (Section 8) https://blog.naver.com/tipsware/221211757379 1. Windows 응용 프로그램들은 시스템 자원을 사용하고 싶은 경우, API 함수를 호출하여 Windows 운영체제에게 서비스를 요청하고 해당 서비스에 대한 운영체제의 결과를 기다리는 방식으로 작업이 진행됨. 2. 특정 Window에 마우스를 클릭하거나 키보드를 입력했다면 Windows 운영체제가 해당 Window를 소유한 응용 프로그램에게 그 사실을 알려야지만 해당 응용 프로그램이 사용자 입력에 대한 상황을 처리할 수 있음. => 이를 위해 Windows 운영체제와 실제 반응할 응용 프로그램간의 동기화 기술이 필요. => "Window Message"의 탄생 3. Message ID 운영체제가 Window에 발생한 각종..
Bitmap Create / Draw 시 lock을 걸 때 [ 증상 ] 회사에서 영상 렌더링을 위한 Bitmap Create / Draw 코드를 고칠 일이 있었다. Bitmap Create 하는 구간과 Bitmap Draw 하는 구간을 하나의 mutex로 locking하였다. 이상없이 잘 되나 했더니 화면이 자꾸 껌벅껌벅 거리는 것이었다. [ 원인 ] 이유는 Bitmap Create가 시간을 많이 잡아먹어서 Draw가 제대로 수행되지 않았던 거였다. Bitmap Create 하면서 lock을 계속 잡고 있기 때문에, 같은 mutex를 사용하는 Bitmap Draw영역은 lock 구간에 들어가지 못하고 기다린다. [ 조치 ] lock을 걸 때에는 최대한 lock 구간 내부에서 빨리 빠져나와야 한다. 그래서 Bitmap Create 하는 부분을 locking 범위에..
영상 Delay 이슈 [ 증상 ] 회사 프로그램에서 RTSP 영상을 렌더링하고 있었는데 특정 컴퓨터에서 영상이 지연되는 현상이 발생하였다. 플레이 시간이 길어질수록 VLC로 받은 영상 화면과 회사 프로그램에서 받은 영상 화면과의 시간 차가 점점 더 벌어졌다. 처음엔 두 프로그램 모두 비슷한 영상 화면을 보여주었는데, 점점 회사 프로그램의 영상 화면이 뒤늦게 플레이되고 있었다. [ 원인 ] 회사 프로그램에서 렌더링을 하기 위한 frame queue를 만들어서 수신한 frame들을 관리하는데, 이 frame queue에 frame이 너무 많이 쌓인 게 원인이었다. 즉, queue에서 frame을 Pop 하는 속도보다 Push 하는 속도가 더 빨랐던 것이다. 이러한 이유로 queue에는 처리되지 못한 frame들이 점점 쌓여갔고,..