Вроде работал, но что-то перестал. Почему-то сохраняет файл имеющий
0-й размер.
// http://msdn.microsoft.com/en-us/library/ms533843.aspx
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
}
// Сохраннение в файл на диске в формате JPG
void SaveScreenShotJPG()
{
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
int Width, Height;
HDC scrdc, memdc;
HBITMAP membit;
scrdc = GetDC(0);
Height = GetSystemMetrics(SM_CYSCREEN);
Width = GetSystemMetrics(SM_CXSCREEN);
memdc = CreateCompatibleDC(scrdc);
membit = CreateCompatibleBitmap(scrdc, Width, Height);
SelectObject(memdc, membit);
BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);
Bitmap *bmp = new Bitmap(membit, NULL);
Image *img = bmp->GetThumbnailImage(Width, Height);
CLSID imgClsid;
EncoderParameters encoderParams;
int quality = 65;
encoderParams.Count = 1;
encoderParams.Parameter[0].Guid = EncoderQuality;
encoderParams.Parameter[0].Type = 4;
encoderParams.Parameter[0].NumberOfValues = 1;
encoderParams.Parameter[0].Value = &quality;
GetEncoderClsid(L"image/jpg", &imgClsid);
int status;
status = img->Save(L"Z:\\ImageDesktop.jpg", &imgClsid, &encoderParams);
delete bmp;
delete img;
}
Что не так?
Вот такой работает (здесь
BMP-формат):
// Сохраннение в файл на диске в формате BMP
void SaveScreenShotBMP()
{
ULONG_PTR gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
int Width, Height;
HDC scrdc, memdc;
HBITMAP membit;
scrdc = GetDC(0);
Height = GetSystemMetrics(SM_CYSCREEN);
Width = GetSystemMetrics(SM_CXSCREEN);
memdc = CreateCompatibleDC(scrdc);
membit = CreateCompatibleBitmap(scrdc, Width, Height);
SelectObject(memdc, membit);
BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);
Bitmap *bmp = new Bitmap(membit, NULL);
Image *img = bmp->GetThumbnailImage(Width, Height);
CLSID imgClsid;
GetEncoderClsid(L"image/bmp", &imgClsid);
int status;
status = img->Save(L"Z:\\ImageDesktop.bmp", &imgClsid);
delete bmp;
delete img;
}