2013-01-03 2 views
2

Visual Studio 2010에서 libpng와 결합 된 CImg을 사용하여 png 이미지를 표시합니다. CImg을 사용하여 이미지를 표시 할 때 투명도가 올바르게 표시되지 않는 것으로 보입니다. 이것이 CImg의 개념, 내가 만든 실수, 또는 둘의 조합을 완전히 파악하지 못한다면 고소하지 않습니다! 예상대로 투명 배경 -CImg이 투명 PNG 이미지를 올바르게 표시하지 않습니까?

image showing the problem described

왼쪽의 이미지는 윈도우 사진 뷰어에서 열립니다로 이미지를 보여줍니다. 오른쪽 이미지는 실제로 문자를 둘러싼 이상한 갈색 영역이있는 순수한 흰색 배경을 표시하는 CImg 디스플레이를 보여줍니다.

CImg은 png에 4 번째 알파 채널을로드합니다 (오른쪽 이미지 창 제목에 표시된 것처럼). CImg 디스플레이의 영역 위로 마우스를 가져 가면 작은 팝업 (오른쪽 이미지 왼쪽 아래)에 올바른 투명도 값이 표시됩니다. CImg은 투명도 값에 관계없이 모든 것을 그리는 것처럼 보입니까?

제 질문은 Cimg가 투명 섹션이있는 pgn을 올바르게 표시하도록하려면 어떻게해야합니까? 다음과 같이 예를 들어

내 코드는 다음과 같습니다

#define cimg_use_png 
#include <CImg.h> 
using namespace cimg_library; 

int main() 
{ 
    CImg<unsigned char> image("image.png"); 
    image.display(); 
    return 0; 
} 

답변

3

CIMG의 기본 표시 뷰어는 이미지의 3 개 첫번째 채널을 보여줍니다. 4 번째 채널이 실제로 투명 채널이라는 것을 무시합니다. 다른 것 (예 : CMYK 코드 이미지의 경우 K 채널) 일 수 있습니다. CImg은 이러한 종류의 정보를 저장하지 않으므로 사용자가 마지막에 조작 한 내용을 알 수 있습니다. 당신이 CIMG에 표시 할 수있는 투명성을위한 4 채널 어떤이있는 경우 , 당신은 다음과 같이 자신에 의해, 작은 렌더링 과정을 만들 수 있습니다

CImg<unsigned char> render(img.width(),img.height(),1,3,255); 
render.draw_image(0,0,0,0,img,img.get_channel(3),1,255); 

(가정 'IMG는'당신의 4 채널 이미지). 'render'는 흰색 배경 위에 초기 (투명) 이미지를 렌더링하는 RGB 컬러 이미지입니다.

+0

감사합니다. 완벽하게 작동합니다! – TVOHM