如何将 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 图片最简单的方法
如何在 CBitmap 上使用具有透明背景的 CDC 绘制文本?