Нужно конвертировать JPEG в 8-битный BMP. В результате получается 24-битный BMP. Что не так далаю? | Код | #include <windows.h> #include <stdio.h> #include <tchar.h> #include <gdiplus.h> #pragma comment (lib, "gdiplus.lib") using namespace Gdiplus;
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size); if(size == 0) return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } }
free(pImageCodecInfo); return -1; // Failure }
int APIENTRY _tWinMain(HINSTANCE hinst, HINSTANCE, LPTSTR, INT) { CLSID clsid; EncoderParameters ep; GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Image *jpg=new Image(L"C:\\code.jpg"); //Bitmap bmp(L"C:\\code.bmp"); if(GetEncoderClsid(L"image/bmp", &clsid) != -1) { long depth = 8; ep.Count = 1; ep.Parameter[0].Guid = EncoderColorDepth; ep.Parameter[0].NumberOfValues = 1; ep.Parameter[0].Type = EncoderParameterValueTypeLong; ep.Parameter[0].Value = &depth; jpg->Save(L"C:\\code.bmp", &clsid, &ep); } else MessageBeep(0);
delete jpg;
GdiplusShutdown(gdiplusToken); return 0; } |
|