注册 登录
编程论坛 VFP论坛

vfp 的image控件是不是不能识别32位的bmp文件

sam_jiang 发布于 2023-05-13 10:38, 206 次点击
如题,这个image控件是不是不能正常显示bit位为32的bmp文件?windows的资源管理器可以识别,第三方图片软件看图王可以查看,photoshop也可以查看,image控件显示就花了。。。

这算不算是个bug? 有什么办法可以补救?

附图:
只有本站会员才能查看附件,请 登录


你们看看能不能用image控件显示我下面这个bmp文件(下载后把jpg后缀去掉)
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-5-13 10:39编辑过]

12 回复
#2
foxfans2023-05-13 14:03
深32bmp以前碰到过这个问题,我的解决方法有二个供参考
1.如果是通过gdi这种或者dc画出来没有写文件的可以直接从内存里面获取图像stream流指针通过sys(2600,拷出来,赋值给image PictureVal
2.如果是已保存的本地文件可以thisform.image1.PictureVal =FILETOSTR(GETFILE('bmp32深.bmp'))

[此贴子已经被作者于2023-5-13 14:13编辑过]

#3
csyx2023-05-13 15:18
以下是引用foxfans在2023-5-13 14:03:16的发言:

深32bmp以前碰到过这个问题,我的解决方法有二个供参考
1.如果是通过gdi这种或者dc画出来没有写文件的可以直接从内存里面获取图像stream流指针通过sys(2600,拷出来,赋值给image PictureVal
2.如果是已保存的本地文件可以thisform.image1.PictureVal =FILETOSTR(GETFILE('bmp32深.bmp'))

#4
sam_jiang2023-05-13 15:31
回复 2楼 foxfans
刚才试了以下,不成功,你可以写个示例吗?
_screen.addobject("image1","image")
cpic=FILETOSTR("_tmp1_cutted.bmp") &&深32位图片
_screen.image1.Pictureval=cpic
*!* opic=LOADPICTURE("_tmp1_cutted.bmp") &&用这个也不行
*!* _screen.image1.Pictureval=opic
_screen.image1.visible=.t.


[此贴子已经被作者于2023-5-13 15:36编辑过]

#5
foxfans2023-05-13 15:39
我这里是Vfp9.0 7423
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-5-13 15:46编辑过]

#6
wxzd1232023-05-13 15:42
只有本站会员才能查看附件,请 登录
好像得是rgb,上次有一个图是cmyk就出错
#7
sam_jiang2023-05-13 15:45
我的是09.00.0000.2412,大爷的,盗版软件。。。

看来得重新下载个vfp

[此贴子已经被作者于2023-5-13 15:53编辑过]

#8
sam_jiang2023-05-13 15:54
回复 6楼 wxzd123
是rgb的,是色深的问题。
#9
吹水佬2023-05-13 16:12
文件头数据不对,VFP可能没有校对。
其中 BITMAPINFOHEADER 头的 SizeImage: 980
而 Bitmap Data Info 的 DataSize: 3696
且 BITMAPFILEHEADER 的 Size: 3750;OffBits: 54
显然 SizeImage 为 980 (0x03D4)不对,应该是 3696 (3750 - 54)
修改 SizeImage 为 3696 (0x0E70)就可以
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

#10
foxfans2023-05-13 16:27
生成文件源头做起,把结构大小写清楚.
#11
sam_jiang2023-05-13 17:19
回复 9楼 吹水佬
我是参考了这篇文章写的: https://baike.baidu.com/item/BMP%E6%A0%BC%E5%BC%8F/3427000?fr=aladdin
里面提及:
biSizeImage
说明图像的大小,以字节为单位。当用BI_RGB格式时,可设置为0

误以为,这个值没什么作用。。。

因为看图软件,widows资源管理器,包括photoshop都可以正常打开,更是觉得这个值没什么用。
#12
sam_jiang2023-05-13 17:20
回复 10楼 foxfans
用pictureval也确实能显示图片,谢谢2位大佬!
#13
吹水佬2023-05-13 20:05
以下是引用sam_jiang在2023-5-13 17:19:05的发言:

我是参考了这篇文章写的: https://baike.baidu.com/item/BMP%E6%A0%BC%E5%BC%8F/3427000?fr=aladdin
里面提及:
biSizeImage
说明图像的大小,以字节为单位。当用BI_RGB格式时,可设置为0

误以为,这个值没什么作用。。。

因为看图软件,widows资源管理器,包括photoshop都可以正常打开,更是觉得这个值没什么用。

这个图片biSizeImage可以为0, 问题是她不为0,数值也不对。
1