#include
#include
#include
Using namespace gdiplus;
#pragma comment (Lib, "GDIPLUS.LIB")
GDIPLUSSTARTUPINPUT GDIPLUSSTARTUPINPUT;
Ulong_ptr gdiplustoken;
INT GetEncoderClsid (LPCWSTR FORMAT, CLSID * PCLSID)
{
UINT NUM = 0;
Uint size = 0;
ImageCodecInfo * pimagecodecinfo =
NULL;
GetImageEncodersSize (& Num, & size);
IF (size == 0)
Return -1;
PimageCodecInfo = (ImageCodecInfo *) (Malloc (size));
IF (pimagecodecinfo ==
NULL)
Return -1;
GetImageEncoders (NUM, SIZE, PIMAGECODECINFO);
For (uint j = 0; j { IF (pimagecodecinfo [j] .mimetype, format) == 0) { * pCLSID = pimagecodecinfo [j] .clsid; FREE (PIMAGECODECINFO); Return J; } } FREE (PIMAGECODECINFO); Return -1; } // Parameter // xs = image X-axis size // ys = image Y-axis size // Quality = JPEG image quality Void Savecurscreenjpg (LPCWSTR PSZFILENAME, INT XS, INT Ys, INT Quality) { HWND HWND = :: getDesktopWindow (); HDC HDC = getWindowDC (NULL); INT x = getDeviceCaps (HDC, Horzres); INT Y = getDeviceCaps (HDC, Vertres); Hbitmap hbmp = :: createcompatiblebitmap (HDC, X, Y), HOLD HDC HMEMDC = :: CreateCompatibleDC (HDC); Hold = (hbitmap) :: SelectObject (HMEMDC, HBMP); Bitblt (HMEMDC, 0, 0, X, Y, HDC, 0, 0, SRCCopy); SelectObject (HMEMDC, HOLD); { Bitmap Bit (XS, YS), BIT2 (HBMP, NULL); Graphics G (& Bit); G.scaletransform ((float) XS / X, (FLOAT) YS / Y); g.drawImage (& Bit2, 0, 0); CLSID Encoderclsid; EncoderParameters Encoderparameters; EncoderParameters.count = 1; Encoderparameters.Parameter [0] .GUID = Encoderquality; Encoderparameters.Parameter [0] .type = encoderparameterValeTypelong; Encoderparameters.Parameter [0] .NumberofValues = 1; Encoderparameters.Parameter [0] .value = & quality; GetEncoderclsid (l "image / jpeg", & encoderclsid; Bit.save (PSZFileName, & Encoderclsid, & Encoderparameters); } :: DeleteObject (HBMP); :: DeleteObject (HMEMDC); Return; } Int apientry Winmain (Hinstance Hinstance, Hinstance Hprevinstance, LPSTR LPCMDLINE, INT ncmdshow) { GDIPLUSSTARTUP (& GDIPLUSTOKEN, & GDIPLUSTARTUPINPUT, NULL); :: Savecurscreenjpg (l ".// Cap.400.300.30.jpg", 400, 300, 30); :: Savecurscreenjpg (l ".// Cap.800.600.100.jpg", 800, 600, 100); :: Savecurscreenjpg (l ".// Cap.800.600.100.jpg", 640, 480, 50); GDIPLUSSHUTDOWN (GDIPLUSTOKEN); Return 0; }