首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中不使用CImage将HBITMAP转换为JPEG /PNG

在C++中不使用CImage将HBITMAP转换为JPEG /PNG
EN

Stack Overflow用户
提问于 2012-11-26 03:59:48
回答 2查看 3.9K关注 0票数 2

我有一个要保存到JPEG/PNG流或字节数组中的HBITMAP。问题是我使用mingw作为我的编译器,所以我不能使用CImage。这会让我的生活更轻松。

我可以毫无问题地从位图中获取像素,但我不知道如何以JPEG/PNG格式访问它们。

我该从哪里开始呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-26 04:30:27

如果您有access JPEG库,您可以使用IStream将您的图像转换为DirectX http://msdn.microsoft.com/en-us/library/windows/desktop/aa380034(v=vs.85).aspx

或者如果你有GDI+,像这样的东西可能会起作用

代码语言:javascript
运行
复制
Gdiplus::Bitmap bmp(hbmpImage,(HPALETTE)0);
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bmp.Save(L"D:\image.png",&pngClsid,NULL);

其中GetEncoderLCLsid如下所示:

代码语言:javascript
运行
复制
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
}

别忘了初始化GDI+

代码语言:javascript
运行
复制
 GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR gdiplusToken;
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

如果两者都无法访问,则可以使用libjpeg,但需要将GnuWin32站点中的所有依赖项包放入其中。这个页面中的代码应该运行得更快,只需忘记boost即可

libjpeg dying without message

票数 1
EN

Stack Overflow用户

发布于 2016-04-20 02:32:22

另一种选择是使用WIC API (Windows图像组件),它可以直接访问图像编码器和解码器。我相信GDI+可能会在幕后利用这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13554905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档