2011-01-24 22 views
0

MFC 응용 프로그램에서.투명도가있는 MFC 도구 모음 및 PNG 이미지 사용, 잘못된 투명도 효과

FromFile을 사용하여 Gdiplus :: Bitmap에 알파 채널 비트가있는 32 비트 PNG 파일을로드하는 중입니다.

그런 다음 Bitmap :: GetHBitmap을 사용하여 Gdiplus :: Bitmap에서 HBITMAP을 검색합니다.

저는이 핸들을 사용하여 비트 맵을 imagelist에 추가합니다.

툴리스트에 도구 모음 단추를 추가하려면 해당 이맥 목록을 사용하십시오.

그러나 이상한 이유로 이미지에 예상대로 알파 채널이 사용되지 않습니다. 알파 채널을 사용하여 투명도를 결정하는 대신 알파 채널의 조합과 투명도를 계산하기 위해 픽셀 색상을 흰색 (0x ?? FFFFFF)에 얼마나 가깝게 사용합니까? 따라서 점진적으로 투명한 흰색 픽셀이있는 이미지는 전혀 나타나지 않지만 점진적으로 투명한 검은 색 픽셀이있는 이미지는 올바르게 표시됩니다.

나중에 비트 맵에서 HBitmap으로 비트 맵을 투명하게 배경색으로 사용하고 imagelist와 툴바의 배경색이 투명하고 동일한 결과를 얻도록 코드를 편집했습니다.

또한 HBITMAP을 사용하여 CBitmap을 얻었으며 AlphaBlend() 메서드를 사용하여 비트 맵 비트를 미리 곱하여 창에 그리면 올바르게 그립니다.

내 이미지 목록이 32 비트 이미지 설정 인 ILC_COLOR32 플래그를 사용하고 있는지 확인했습니다.

이미지가 imagelist 또는 툴바에 추가되는 방법에 문제가 있다는 것을 알고 있지만이를 수정하는 방법을 알 수 없습니다.

이것은 모두 동적으로 수행되므로 사람들이 Visual Studio에서 알파 채널을 제거하는 것에 대해 불평하는 것과 같은 이슈가 없습니다.

+0

imagelist를 만들 때'ILC_COLOR32' 플래그를 지정합니까? –

+0

예 그 깃발을 지정하십시오 –

+0

* 게시하는 대신 * 귀하의 코드를 설명하는 데 너무 많은 시간을 소비하셨습니까? 소스 코드를 읽을 수 있다면 문제를 디버그하는 것이 훨씬 쉽습니다. –

답변

0

문제가 해결되었습니다. 흰색을 투명성으로 변환하는 것은 엄청난 숨겨진 코드였습니다. 그것은 저를 넘어선 것입니다. 그러나 거기에는 그것이 있습니다.

언제든지 질문을 닫을 수 있습니다.

관련 문제