由于近期在做PDA照相和图片查看的功能,所以需要用到SHLoadImageFile()函数来实现jpg文件的读取,开始测试时可以读取jpg文件,但是程序打开后只能连续读取几次后就不能读取了,必须关闭重启,后来直接就无法读取,纠结了一下午,查找各种原因,最后经过查找资料和自己摸索发现造成无法读取的原因主要有三个:
1、系统本身不支持SHLoadImageFile()函数,因为MSDN上说必须满足一下条件,不过现在基本上都是WM5、6了,所以一般都会支持
PocketPC: Windows Mobile 2003 and later.
OS Versions: Windows CE .NET 4.0 and later.
Header: Declared in Aygshell.h.
Library: Use Aygshell.lib.
2、由于没有及时释放句柄,,(这也是我开始几次可以成功读取后来无法读取的原因);
HBITMAP hBmpNew=SHLoadImageFile(L"MyDocuments\\Photo\\test.jpg");中的 hBmpNew再使用完之后必 须DeleteObject(hBmpNew);,释放句柄,
3、图片拍摄时设置的分辨率太高,(这个是自己发现的)
如果图片的分辨率是设置的太高,拍摄的图片当SHLoadImageFile()时,返回值始终为NULL,这个就是整 整纠结了我一下午的问题,最后发现了
如果摄像头得分辨率设置成320*240、640*480、1280*960、1600*1200一般都是可以的,但是如果设置的再高的话就会出现上面的问题。
花费了一下午,问题解决了,在这里总结一下,希望对大家以后有用。