如何将 jpg 文件加载到 CBitmap (visual c++ 6.0) 中?

Posted

技术标签:

【中文标题】如何将 jpg 文件加载到 CBitmap (visual c++ 6.0) 中?【英文标题】:How can I load a jpg file into CBitmap (visual c++ 6.0)? 【发布时间】:2012-04-10 12:08:12 【问题描述】:

如何将 jpg 加载到使用 Visual c++ 6.0 且无法访问 CImage 的 CBitmap 中?

谢谢

【问题讨论】:

大多数所谓的 C++ 编译器并不完全符合标准,但 MSVC 6 太老旧了,根本不配称为 C++ 编译器。升级!另外,请注意,我们对您问题的回答可能不适用于 VC6,因为我们在这里使用的是标准 C++,它是三个主要版本之后的版本,比 msvc6 早 14 年。 有些人被绑定到需要VC6的平台或工具链上。请不要对其他人的情况不屑一顾,尤其是在您对他们/它一无所知的情况下。 【参考方案1】:

我会简单地调用 OleLoadPicturePath api 来加载不仅 jpg 还加载其他常见格式。

将其加载到 IPicture 对象后,您可以调用 get_Handle 来获取 HBITMAP 的句柄。

谢谢

【讨论】:

【参考方案2】:

据我所知,没有本地方式。对于 JPG 和 PNG,我一直使用 FreeImage - 它非常强大,FAQ 中有关于如何将 PNG 加载到 HBITMAP 中的示例代码(对于 JPG,它的工作原理完全相同)。

来自经验的警告 - 如果您将 JPG 存储为资源,请确保创建“JPG”资源类型并将其存储,不要尝试将其添加为 BITMAP 资源,否则尝试加载它时会遇到各种问题。我知道这听起来很明显,但我花了一段时间才弄清楚。

【讨论】:

【参考方案3】:

您不能,或者至少没有内置方式。看看 CxImage,你可能可以让它工作,特别是当你只需要 jpg 支持时。

【讨论】:

【参考方案4】:

这种转换很复杂,所以我建议使用外部库,看看this。

【讨论】:

【参考方案5】:
CBitmap bmp;
HANDLE h = ::LoadImage(NULL, _T("c:\\MyImage.jpg"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
bmp.Attach(h);

【讨论】:

只能加载位图,不能加载jpg。我给“LoadImage”一个pt,因为它很有用...... thx @jdl 你试过了吗?我昨天从记忆中走了出来,但这是我在自己的代码中打开 JPEG 的确切语句:m_hDIBSection = LoadImage(NULL, lpszPathName, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE); @jdl,我很抱歉,我认为您是对的,我从中复制该行的程序仅适用于 BMP 文件。我可以删除这个答案。

以上是关于如何将 jpg 文件加载到 CBitmap (visual c++ 6.0) 中?的主要内容,如果未能解决你的问题,请参考以下文章

MFC中,如何将CBitmap中的图片复制到另一CBitmap的一块区域中,即如何读取一个CBit

VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法

jpg格式图片如何加载到ARCGIS中

如何在 CBitmap 上使用具有透明背景的 CDC 绘制文本?

[ATL/WTL]_[中级]_[保存CBitmap到文件-保存屏幕内容到文件]

如何将位图文件加载到 BitmapData 对象中?