C++如何用GDI+裁剪图片
比如把800*600变成400*200支持各种类型的图片
比如把800*600变成400*200支持各种类型的图片
答案:Image* FixedSize(Image *imgSrc, int Width, int Height)
{
int w,h;
w = imgSrc->GetWidth ();
h = imgSrc->GetHeight ();
if (w<h) //图片是竖着的 交换Width和Height
{
Width = Width + Height;
Height = Width - Height;
Width = Width - Height;
}
Bitmap *bmPhoto = new Bitmap(Width, Height);
bmPhoto->SetResolution(imgSrc->GetHorizontalResolution(),imgSrc->GetVerticalResolution());
Graphics grPhoto(bmPhoto);
grPhoto.Clear((ARGB)Color::White);
grPhoto.SetInterpolationMode(InterpolationModeHighQualityBicubic);
grPhoto.DrawImage(imgSrc,0,0,Width,Height);
return bmPhoto;
}int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytesImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // FailurepImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // FailureGetImageEncoders(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);
VC6可以使用GDI+的,但是要用VC6自己的GDI+ 的头和库而且第一句还需要
return -1; // Failure
}
#include <windows.h> 因为GDI实际上用到了大量的Windows的API的图像函数
上一个:C++中关于函数的一点问题
下一个:c++ 销售员业绩管理类的设计