如何用 IPicture 类 来显示图片呢?

alphagx 2005-04-25 10:03:49
我这个图片是一个Bitmap,以资源的形式保存在工程中。
并且它是一个BMP类型。

假设ID号是 IDB_BITMAP1。

我在加载的时候,使用的方法为:

1、FindResource
2、LoadResource
3、LockResource

我在用SizeofResource 的时候发现一个很奇怪的问题,
返回的大小,始终是比 真正的图片大小小 14个字节。

这14个字节正好是 BITMAP 的首部。


typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;


而且返回的缓冲区也是 从 这14个字节后开始的,
这时候用 OleLoadPicture 肯定会失败。

这个是不是微软函数的BUG呢??

我后来将图片转成了JPG,然后再加载,图片能加载成功。

没有仔细分析为什么,但为什么BMP类型的就不行呢??

有没有网友发现过这样的问题的???





hInst = GetModuleHandle(NULL);
lpName = MAKEINTRESOURCE(IDB_BITMAP2);
lpType = RT_BITMAP;

hResInfo = FindResource(hInst, lpName, lpType);

if (hResInfo == NULL)
return false;

// Load the resource
hRes = LoadResource(hInst, hResInfo);

if (hRes == NULL)
return false;

// Lock the resource
lpRes = (char*)LockResource(hRes);
...全文
159 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphagx 2005-04-25
  • 打赏
  • 举报
回复
我觉得还是 FindResource在处理时候的问题。

在查找PE的资源表的时候,如果判断到参数是 RT_BITMAP,则跳过文件头部。

我用WINHEX打开PE文件,看到EXE里面其实是有PE头部信息的,

而只不过 FindResource 函数没有将其返回。。
菜牛 2005-04-25
  • 打赏
  • 举报
回复
资源中的BITMAP本来就没有文件头部。
NOMADBLUE 2005-04-25
  • 打赏
  • 举报
回复
文件方式当然是可以的;原先发现过这个问题,没办法就舍弃了,改用文件。
关注、、、、、
oyljerry 2005-04-25
  • 打赏
  • 举报
回复
文件方式载入应该可以的,再检查一下
alphagx 2005-04-25
  • 打赏
  • 举报
回复
文件方式是可以的。
因为这时候,获取到的缓冲区中包含了BMP的头部。

handwolf 2005-04-25
  • 打赏
  • 举报
回复
我是以文件方式来load的
可以!
alphagx 2005-04-25
  • 打赏
  • 举报
回复
你用WINHEX搜索BITMAPFILEHEADER后面的字节就能搜索到,
vcmute 2005-04-25
  • 打赏
  • 举报
回复
EXE里也没有BITMAPFILEHEADER
Open Binary Data是系统加了BITMAPFILEHEADER

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧