使用GDI+保存带品质的JPG

    由于使用CImage将图像转换成JPG后品质严重受损,如果使用第三方库程序体积会很大,所以使用GDI+是最合适的选择。下面的代码示例了将位图格式的图像转换成不同品质的JPG格式,注意在使用之前要初始化GDI+库。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中使用GDI+将RGB32格式的图像保存JPG格式,你可以使用以下示例代码: ``` #include <windows.h> #include <gdiplus.h> #pragma comment (lib, "Gdiplus.lib") using namespace Gdiplus; void saveRgb32AsJpg(const WCHAR* fileName, BYTE* imageData, int width, int height, int quality) { Bitmap bitmap(width, height, PixelFormat32bppRGB); BitmapData bitmapData; Rect rect(0, 0, width, height); // 将图像数据复制到Bitmap对象中 bitmap.LockBits(&rect, ImageLockModeWrite, PixelFormat32bppRGB, &bitmapData); memcpy(bitmapData.Scan0, imageData, bitmapData.Stride * height); bitmap.UnlockBits(&bitmapData); // 保存图像为JPG格式 CLSID jpgClsid; GetEncoderClsid(L"image/jpeg", &jpgClsid); EncoderParameters encoderParams = { 0 }; encoderParams.Count = 1; encoderParams.Parameter[0].Guid = EncoderQuality; encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong; encoderParams.Parameter[0].NumberOfValues = 1; encoderParams.Parameter[0].Value = &quality; bitmap.Save(fileName, &jpgClsid, &encoderParams); } int main() { // 以下是示例代码,假设你已经有了一个RGB32格式的图像数据 BYTE* imageData = new BYTE[width * height * 4]; // 将图像数据填充为红色 memset(imageData, 0xFF, width * height * 4); // 保存图像为JPG格式 saveRgb32AsJpg(L"image.jpg", imageData, width, height, 80); delete[] imageData; return 0; } ``` 在这个示例中,你需要创建一个RGB32格式的Bitmap对象,并将图像数据复制到Bitmap对象中。然后使用GetEncoderClsid函数获取JPEG编码器的CLSID,创建一个EncoderParameters结构体设置JPEG的压缩质量,最后使用Save方法将图像保存JPG格式。注意,你需要在代码中引用Windows.h和Gdiplus.h头文件,并链接Gdiplus.lib库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值