int Getencoderclsid (const wchar* format, clsid* pClsid)
{
UINT num = 0;
UINT size = 0;
imagecodecinfo* pimagecodecinfo = NULL;
Gdiplus::getimageencoderssize (&num, &size);
if (size = = 0)
{
return-1;
}
Pimagecodecinfo = (imagecodecinfo*) malloc (size);
if (pimagecodecinfo==null)
{
return-1;
}
Gdiplus::getimageencoders (num, size, pimagecodecinfo);
for (UINT i = 0; i < num; i++)
{
if (wcscmp (pimagecodecinfo[i). MimeType, format) = = 0)
{
*pclsid = Pimagecodecinfo[i]. Clsid;
Free (pimagecodecinfo);
return i;
}
}
Free (pimagecodecinfo);
return-1;
}
BOOL Savehdctofile (hdc hdc, LPRECT LPRECT)
{
BOOL bRet = FALSE;
int nwidth = lprect->right-lprect->left;
int nheight = lprect->bottom-lprect->top;
HDC MEMDC = CreateCompatibleDC (HDC);
Hbitmap hbmp = CreateCompatibleBitmap (HDC, nwidth, nheight);
SelectObject (MEMDC, hbmp);
BitBlt (MEMDC, 0, 0, nwidth, nheight,
HDC, 0, 0, srccopy);
CLSID Bmpclsid;
L "image/bmp" L "image/jpeg" L "image/gif" L "Image/tiff" L "image/png"
Getencoderclsid (L "Image/jpeg", &bmpclsid);
gdiplus::bitmap* pbmpsrc = Gdiplus::bitmap::fromhbitmap (hbmp, NULL);
if (Pbmpsrc->save (L "1.jpg", &bmpclsid) = = Ok)
{
BRet = TRUE;
}
Delete pbmpsrc;
SelectObject (MEMDC, (HBITMAP) NULL);
DeleteDC (MEMDC);
DeleteObject (hbmp);
return bRet;
}
void Cdemo01dlg::onbutton1 ()
{
Todo:add your control notification handler code here
HDC HDC =:: GETWINDOWDC (M_hwnd);
Rect rect;
:: GetWindowRect (M_hwnd, &rect);
CString str;
Str. Format ("left=%d top=%d right=%d bottom=%d", Rect.left, Rect.top, Rect.right, Rect.bottom);
MessageBox (str);
Savehdctofile (HDC, &rect);
:: ReleaseDC (M_hwnd, HDC);
}
void Cdemo01dlg::onbutton2 ()
{
Todo:add your control notification handler code here
HDC HDC =:: GetDC (M_hwnd);
Rect rect;
:: GetClientRect (M_hwnd, &rect);
CString str;
Str. Format ("left=%d top=%d right=%d bottom=%d", Rect.left, Rect.top, Rect.right, Rect.bottom);
MessageBox (str);
Savehdctofile (HDC, &rect);
:: ReleaseDC (M_hwnd, HDC);
}
[00013]-[2015-08-27]-[01]-[windows Programming---GDI +---> BMP or JPG or PNG ...]