FireMonkey 不能加载 RGB656 格式的 BMP |
答題得分者是:aftcast
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
RGB656 格式,也就是 16位的 BMP。这种 BMP 文件,用 VCL 的 TImage 加载显示,没有问题。
在 Delphi XE3 底下,FireMonkey TImage 加载显示,也没问题。 在 Delphi XE7 底下,FireMonkey 不管目标平台是 windows 还是 Android,采用 TImage 或者是采用 TBitmap,加载 RBG656 格式的 BMP 文件,都弹出错误提示:加载失败。但同样的代码,加载32位的BMP文件就没有问题。 不知道这个该如何解决? |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
剛幫你又查了文檔,或許你可以將pixel format設為你要的再load看看。
http://docwiki.embarcadero.com/Libraries/XE6/en/FMX.Types.TPixelFormat BGR_565
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
非常感谢!
在 FireMonkey 底下,TBitmap.PixelFormat 是 Read only 的,无法更改其设置。 ===================引 用 aftcast 文 章=================== 剛幫你又查了文檔,或許你可以將pixel format設為你要的再load看看。 http://docwiki.embarcadero.com/Libraries/XE6/en/FMX.Types.TPixelFormat BGR_565
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
问题原因找到了。
之前的那个 RGB565 的 BMP 档案,它的档案头,70个 Byte 是通过将 PhotoShop 里面的图保存为 16Bit Bitmap 获得的。这个 Bitmap 档案,可以在 VCL 下通过 TBitmap.LoadFromFile 打开;也可以在 XE3 的 FireMonkey 底下,通过 TBitmap.LoadFromFile 打开。 但这个档案在 XE7 底下的 FireMonkey 中的 TBitmap.LoadFromFile 无法打开。追踪代码,发现 FireMonkey 在判断档案文件的头时直接退出了。 在 XE7 底下,我用 VCL 的 TBitmap.LoadFromFile 打开这个档案,然后再 SaveToFile 保存为另外一个档案,然后对比两个档案的头,有一些不同。这个新的档案,在 XE7 底下,可以用 FireMonkey 的 TBitmap 打开。 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
謝謝你的分享! 不過,雖然了解問題所在,但很想知道你的解決方案為何?
自己轉檔再load嗎? ===================引 用 pcplayer99 文 章=================== 问题原因找到了。 之前的那个 RGB565 的 BMP 档案,它的档案头,70个 Byte 是通过将 PhotoShop 里面的图保存为 16Bit Bitmap 获得的。这个 Bitmap 档案,可以在 VCL 下通过 TBitmap.LoadFromFile 打开;也可以在 XE3 的 FireMonkey 底下,通过 TBitmap.LoadFromFile 打开。 但这个档案在 XE7 底下的 FireMonkey 中的 TBitmap.LoadFromFile 无法打开。追踪代码,发现 FireMonkey 在判断档案文件的头时直接退出了。 在 XE7 底下,我用 VCL 的 TBitmap.LoadFromFile 打开这个档案,然后再 SaveToFile 保存为另外一个档案,然后对比两个档案的头,有一些不同。这个新的档案,在 XE7 底下,可以用 FireMonkey 的 TBitmap 打开。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
XE7 Firemonkey 无法打开的 BMP 图,是 PhotoShop 保存的 RGB565 格式的。无法打开的原因是它的头不太对。但这个档案在其它工具里能打开,也能用 VCL 的 TImage 或者 TBitmap 打开。
因此,解决办法是转档。方法有2: 1. 用 VCL 的 TBitmap 打开,然后再 Bitmap.SaveToFile 这样保存下来的档案,FireMonkey 可以打开。 2. 找一个正确的相同分辨率的 RGB565 格式的档案(正确是指 Firemonkey 能打开的那种),读取它的前面70个Byte,然后用 TMemoryStream 调入有问题的档案,将这70个 Byte 覆盖到前面,然后 MemoryStream.SaveToFile 的结果档案,Firemonkey 也能打开。 |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
謝謝分享!;-)
===================引 用 pcplayer99 文 章=================== 如果不想转档再Load,可以直接在 RAM 里面操作: MemoryStream.LoadFromFile 调入有问题的文件,然后直接将前面70个字节用正确的覆盖掉: MemoryStream.Position := 0; MemoryStream.Write(MyHead, 70); Bitmap.LoadFromStream(MemoryStream);
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |