Use GDI + gripping and save .jpg file

xiaoxiao2021-03-06  107

#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;

}

转载请注明原文地址:https://www.9cbs.com/read-96963.html

New Post(0)