vs2008中GDI+的使用方法
来源:互联网 发布:易语言免费网络验证 编辑:程序博客网 时间:2024/06/01 08:01
将bmp转成jpg格式:
方法一(优点:能控制压缩比):
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
}
/****************BMP转JPG*********用法示例**************************
Bitmap newbitmap(L"d:\\d.bmp");//加载BMP
const unsigned short *pFileName=L"d:\\new.jpg";//保存路径
SaveFile(&newbitmap,pFileName );
************************************************************/
voidSaveFile(Bitmap* pImage, const wchar_t* pFileName)//
{
EncoderParameters encoderParameters;
CLSID jpgClsid;
GetEncoderClsid(L"image/jpeg", &jpgClsid);
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
// Save the image as a JPEG with quality level 100.
ULONG quality;
quality = 100;
encoderParameters.Parameter[0].Value = &quality;
Status status = pImage->Save(pFileName, &jpgClsid, &encoderParameters);
if (status != Ok)
{
wprintf(L"%d Attempt to save %s failed.\n", status, pFileName);
}
}
// 将当前屏幕保存成为jpg图片
// 参数 xs = 图象x轴大小, ys = 图象y轴大小, quality = jpeg图象质量
voidSaveCurScreenJpg(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 = EncoderParameterValueTypeLong;
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;
}
HBITMAP ReturnHBITMAP(CString FileName)//FileName可能是bmp、dib、png、gif、jpeg/jpg、tiff、emf等文件的文件名
{
Bitmap tempBmp(FileName.AllocSysString()) ;
Color backColor;
HBITMAP HBitmap;
tempBmp.GetHBITMAP(backColor,&HBitmap);
return HBitmap;
}
方法二(优点:简单;缺点:不能控制压缩比):
bool CCaptureWindow::SaevBitmapToJpg(HBITMAP hBitmap, LPCTSTR lpFileName)
{
CImage img;
img.Attach(hBitmap);
HRESULT hResult = img.Save(lpFileName);
DeleteObject(hBitmap);
return TRUE;
}
- vs2008中GDI+的使用方法
- vs2008中GDI+的使用
- vs2008中使用gdi+的设置
- VS2008中使用GDI+
- VS2008中使用GDI+
- VS2008中使用GDI+
- VS2008中配置GDI+
- VS2008中配置GDI+
- VS2008中设置使用GDI+
- GDI+在VS2008 编译不过的解决方法
- c++ GDI 中SelectObject使用方法和注意事项
- GDI+配置(vs2008)
- VS2008 MFC 配置GDI+
- vs2008 使用GDI+绘图
- gdi中path的使用
- 总结GDI+使用方法
- GDI使用方法小结(一)
- GDI使用方法小结(二)
- IE6 position:fixed 不支持 修复
- JS Range HTML文档/文字内容选中、库及应用介绍
- wifi ioctl
- mb_convert_encoding与iconv转码详解
- Linux--Linux互斥锁、条件变量和信号量
- vs2008中GDI+的使用方法
- 像素是什么意思?一个像素有多大? 告诉你像素和分辨率的关系!
- js 判断是否为 Android IOS IPAD IPHONE 等移动设备访问
- sdio架构初解
- java中main函数解析
- 关于禁止webbrowser在触屏电脑上的缩放,找了很多方法,现在总结一下
- linux test
- Python os.path.walk遍历文件,搜索文件里面的内容
- linux设备驱动——andriod平台wlan驱动