我这个图片是一个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);

解决方案 »

  1.   

    我是以文件方式来load的
    可以!
      

  2.   

    文件方式是可以的。
    因为这时候,获取到的缓冲区中包含了BMP的头部。
      

  3.   

    资源中的BITMAP本来就没有文件头部。
      

  4.   

    我觉得还是 FindResource在处理时候的问题。在查找PE的资源表的时候,如果判断到参数是 RT_BITMAP,则跳过文件头部。我用WINHEX打开PE文件,看到EXE里面其实是有PE头部信息的,而只不过 FindResource 函数没有将其返回。。
      

  5.   

    EXE里也没有BITMAPFILEHEADER
    Open Binary Data是系统加了BITMAPFILEHEADER
      

  6.   

    你用WINHEX搜索BITMAPFILEHEADER后面的字节就能搜索到,