2010-02-25 4 views
1

HDC에서 알파 채널을 사용하는지 확인할 수있는 방법이 있습니까? Question 333559Question 685684을 읽었지만 질문은 BITMAP에 관한 것입니다. 분명히, 일부 HDC는 알파 채널을 사용합니다 (사용하지는 않지만 "유형 1"이라고 함) 반면 다른 HDC는 그렇지 않습니다 ("유형 2"). 나는 다음을 수행하여이 문제를 알고 HDC는 알파 채널을 사용합니까?

는 HDC을 감안할 때,
  1. 호환되는 DC를 생성하고, DIB 섹션을 만들 수 있습니다. 호환되는 DC에 생성 된 HBITMAP을 선택하십시오.

  2. BitBlt 호환 DC에 대한 원본 HDC. 이제 DIB 섹션 비트를 검사하십시오. 유형 2 HDC의 경우, 매 3 바이트마다 항상 0 (예 : 255 255 255 0) 바이트가 있습니다. 유형 1의 경우이 바이트는 일반적으로 255입니다 (예 : 250 240 230 255). 가양 성을 피하기 위해 호출 전에 0x80 비트를 모두 memset합니다.

  3. 소스 HDC에서 직접 GetDIBits를 사용하고 HBITMAP을 GetCurrentObject (hdc, OBJ_BITMAP)로 지정하십시오. 두 유형의 HDC 모두 4 번째 바이트는 항상 0입니다.

  4. ExtTextOut을 호출하여 DC 비트 맵을 변경하십시오. 유형 2의 경우 ExtTextOut은 항상 4 번째 바이트를 0으로 설정합니다. 유형 1의 경우 ExtTextOut은 항상 그대로 유지합니다.

는 또한 API에서 생성 된 소스 HDC는 (CreateCompatibleDC(), BeginPaint 함수() ...) 항상 2. 1 HDC은 표준 컨트롤에서 (메뉴 텍스트 등)입니다 입력 한 것으로 나타났습니다. 심지어 유형 1의 HDC I CreateCompatibleDC는 유형 2가됩니다.

한편으로는 Microsoft가 개발자에게 동등한 정보를 제공하지 않는다는 사실에 좌절감을 느낍니다. 다른 한편으로는, 나는 아직도이 HDC를 구별 할 수있는 방법이 있는지 궁금해하고있다.

도움 주셔서 감사합니다.

답변

0

저는 GDI의 동작을 모방 한 것으로 모든 것이 이제는 정상적으로 작동합니다.