5317|15

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个很弱的问题:SHLoadImageFile读位图出错…… [复制链接]

从手机上读取并显示一张位图很简单的代码如下:
hFBmp = SHLoadImageFile(imagePath);     // 到这一句就报错Data Abort: Thread=962dd000
                                        // Proc=80097300 'mobileIM.exe'
                                        // AKY=00040001 PC=03f6f890(coredll.dll+0x00021890)
                                        // RA=00000002(???+0x00000002) BVA=00000031 FSR=00000001
         if (NULL==hFBmp)
         {
                 return false;
         }
         ……
而且这个错很奇怪,花了好长时间不知道怎么调好了,然后出去走了一趟回来再运行就报这个错了。再花了N多时间查资料什么也没改什么就自己好了,然后我又看了会漫画,回来再一运行又不好了……
高手们……

最新回复

多谢各位兄弟的热心帮助,问题找到了。我反复试了一下加载的图片,当图片超过一定宽度的时候就会出data abort的错误,但是高度好像多高都无所谓。不知道怎么回事。接下来把图片进行适当的缩放就可以了。 但是wince的图片缩放还不会=_=。。。。。  详情 回复 发表于 2009-6-25 11:39
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
又是零分,唉...

这个函数很简单的,唯一可能出错就是那个参数。LZ看看imagePath的值是什么?
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不是我想0分的>_<刚注册的号没分。刚试了一下加分咋突然有了100分了Orz.
imagePath的值是"\Program Files\mobileIM\wt100251\Head\MyHead\wt100251.bmp”
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
imagePath前半段的值"\Program Files\mobileIM\"的值是如下获得的:
         TCHAR fileName[256];
         if( !GetModuleFileName(NULL,fileName,MAX_PATH) )
         {
                 return FALSE;
         }
         int iLen=wcslen(wcsrchr(fileName,'\\'));

         iLen=wcslen(fileName)-iLen;
         fileName[iLen+1]='\0';

         CString path=fileName;
后面是自己创建的文件夹。没问题吧?昨天运行的没错,今天工作前看了会漫画就遭报应了T_T
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
或者不用这个函数也行。我想从本地读取一副位图显示在picture control控件里。因为位图的大小不确定所以应该对图像做些缩放处理。请问用什么方法处理?试过用LoadImage()方法,但是显示的图片一片空白。代码如下:

CRect mainrect;
this->m_BtTouXiang.GetWindowRect(&mainrect);

// imagePath的值是"\Program Files\mobileIM\wt100251\Head\MyHead\wt100251.bmp”
hFBmp = (HBITMAP)LoadImage(0, MyPath,
                          IMAGE_BITMAP, mainrect.Width(), mainrect.Height(),
                          0x0010);

m_BtTouXiang.SetBitmap(hFBmp);
m_BtTouXiang.ShowWindow(SW_HIDE);
m_BtTouXiang.ShowWindow(SW_SHOW);

Invalidate();
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

6
 
试试SHLoadDIBitmap怎么样?比如:
hBitmap = (HBITMAP)SHLoadDIBitmap(MAKEINTRESOURCE (IDB_BITMAP_BK));
用LoadImage也行啊:
hBitmap = (HBITMAP)LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_BITMAP_BK));
不过据我测试得到的结果,发现SHLoadDIBitmap的图片渲染速度要比LoadBitmap速度要快,不知为何。
建议还是用SHLoadDIBitmap吧。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

7
 
觉得路径不对,把"\"修改成"\\"
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
SHLoadImageFile這個函數好像只能載入gif文件吧, msdn上是這樣講的.
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 5 楼 Roy_ly 的回复:
试试SHLoadDIBitmap怎么样?比如:
hBitmap = (HBITMAP)SHLoadDIBitmap(MAKEINTRESOURCE (IDB_BITMAP_BK));
用LoadImage也行啊:
hBitmap = (HBITMAP)LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_BITMAP_BK));
不过据我测试得到的结果,发现SHLoadDIBitmap的图片渲染速度要比LoadBitmap速度要快,不知为何。
建议还是用SHLoadDIBitmap吧。

是加载本地图片,没放在资源文件里
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 6 楼 xqhrs232 的回复:
觉得路径不对,把"\"修改成"\\"


哦,那个路径是打印出来的,在路径字符串里就是"\\"
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 7 楼 zhanzongru 的回复:
SHLoadImageFile這個函數好像只能載入gif文件吧, msdn上是這樣講的.

mobile5.0是这么说的
Remarks
This function converts files of several types, including GIF (Graphics Interchange Format), PNG (Portable Network Graphics), JPG (Joint Photographic Experts Group), ICO (icon), and BMP (bitmap) file formats. Other image file types may be supported if the correct decoder is installed.
支持bmp文件~
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
另外一个解决方案,你不嫌效率低的话,可以用COM的方式
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

13
 
用SHLoadDIBitmap()试试吧,我一直用的是它。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 91program 的回复:
用SHLoadDIBitmap()试试吧,我一直用的是它。

 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 11 楼 Roy_ly 的回复:
另外一个解决方案,你不嫌效率低的话,可以用COM的方式


实在不行,你就玩玩COM吧。。。。。。。


  1.     HDC hdc = GetDC(hWnd);
  2.     IImagingFactory *pImgFactory = NULL;
  3.     IImage *pImage = NULL;
  4.     RECT rc = { 0, 0, 110, 88};
  5.     CoInitializeEx(NULL, COINIT_MULTITHREADED);

  6.     // Create the imaging factory.
  7.     if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory,
  8.                                     NULL,
  9.                                     CLSCTX_INPROC_SERVER,
  10.                                     IID_IImagingFactory,
  11.                                     (void **)&pImgFactory)))
  12.     {
  13.         // Load the image from the JPG file.
  14.         if (SUCCEEDED(pImgFactory->CreateImageFromFile(
  15.                         TEXT("\\Program Files\\Imaging\\flower.jpg"),
  16.                         &pImage)))
  17.         {
  18.             // Draw the image.
  19.             pImage->Draw(hdc, &rc, NULL);
  20.             pImage->Release();
  21.         }

  22.         pImgFactory->Release();
  23.     }
  24.     CoUninitialize();
复制代码
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

16
 
多谢各位兄弟的热心帮助,问题找到了。我反复试了一下加载的图片,当图片超过一定宽度的时候就会出data abort的错误,但是高度好像多高都无所谓。不知道怎么回事。接下来把图片进行适当的缩放就可以了。
但是wince的图片缩放还不会=_=。。。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表