CodeProject를 구경하다가 CxImage 라는 이미지 라이브러리를 보았다.
http://www.codeproject.com/bitmap/cximage.asp
해당링크의 소개를 간단히 요약하자면...
CxImage는 C++ 클래스이고, load, save, display, transform images 가 가능하다.
image library로는 OpenIL, FreeImage, PaintLib같은 좋은 라이브러리가 많이 있지만, 이들 라이브러리는 주로 platform independent 를 지향 하거나, C 로 만들어지는 등 사용상의 약간 불편함들이 있다.
CxImage 자체로는 BMP,GIF,ICO,TGA,PCX,WBMP,WMF 가 지원되고, 그외 JPEG, PNG, MNG, TIFF 등의 포멧들은 추가 라이브러리가 필요하다.
CxImage 배포형식이 full과 lite가 있는데 lite는 CxImage 소스만을 포함하고 있으며, full에는 다른 포멧이 요구하는 라이브러리가 (jpeg, png, zlib, 등등) 포함되어 있다.
CxImage 는 image resource, file, memory 로 생성이 가능하다.
간단한게 이미지 디코딩해서 화면에 그리는 sample code
CxImage image((BYTE*)(wi->imageData), wi->imageSize, CXIMAGE_FORMAT_UNKNOWN);
if (!image.IsValid() ) {
AfxMessageBox(image.GetLastError());
return;
}
CRect rc;
int x1,y1,w,h;
GetClientRect(&rc);
w = image.GetWidth();
h = image.GetHeight();
x1 = rc.Width() - w;
y1 = rc.Height() - h;
x1 = x1 > 0 ? x1 / 2 : 0;
y1 = y1 > 0 ? y1 / 2 : 0;
image.Stretch(pDC->GetSafeHdc(), CRect(x1,y1,x1 + w,y1 + h));
원래 생성자에 imagetype을 넣도록 되어 있는데 UNKNOWN으로 줬더니 자동으로 되는듯 보인다.