본문 바로가기

Library/Windows Programming

CxImage에서 투명 픽셀을 표시하려면?

투명 픽셀을 이용할 수 있는 PNG 파일과 같은 경우, CxImage에서는 SetTransIndex(), SetTransColor(), AlphaStrip()을 이용하여 투명 픽셀을 표시하게 된다.

먼저, 필요한 파일을 부르고, 이 파일에 대해서 SetTransIndex(0)을 호출하여 투명 처리를 가능하게 해주어야 한다. 그 다음, SetTransColor()을 호출하는데, 이 메서드는 인자로 RGBQUAD를 요구한다. 여기에 넘겨지는 값은 투명도를 표시하는 픽셀의 RGBQUAD 값이다. 그리고, 마지막으로 AlphaStrip()을 호출하면 해당 이미지의 투명 픽셀을 출력할 수 있다.

예를 들어, RGBA = 0xFF, 0xFF, 0xFF, 0xFF의 값이 투명을 의미하는 픽셀값일 경우, 다음과 같이 처리한다. pImage는 CxImage로 인스턴스화된 객체라고 하자.

RGBQUAD bkg = { 0xFF, 0xFF, 0xFF, 0xFF };
pImage->SetTransIndex(0);
pImage->SetTransColor(bkg);
pImage->AlphaStrip();


사용된 배경의 투명 RGBQUAD 값을 잘 모르겠다면, 다음과 같은 코드를 사용하면 된다.

pImage->SetTransIndex(0);
pImage->SetTransColor(pImage->GetTransColor());
pImage->AlphaStrip();

물론, 이것은 문제가 있는 코드이다. pImage->GetTransColor()는 투명 처리가 가능하지 않다면 -1을 반환하는데, 여기서는 그 처리가 빠져있다. 실제로 코드를 작성할 때는 이것을 고려하여 작성해야 한다. 만약, 원하는대로 투명 픽셀이 처리되지 않았다면, 비트맵 파일을 다시 한번 확인해보라. 흔하지는 않지만, 비트맵 파일의 투명 픽셀 처리가 정상적이지 않은 경우도 있다.