|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
请教一个BMP图片转化的问题。 |
作者:liangjingxin 栏目:嵌入式系统 |
请问各位大侠,如何把BMP图片转化成三星的44B0可以识别的格式,然后把这些数据写进44B0显示缓冲区通过液晶屏显示出来? |
2楼: | >>参与讨论 |
作者: eleven11 于 2006/10/5 21:42:00 发布:
BMP格式图像文件详析 首先请注意所有的数值在存储上都是按“高位放高位、低位放低位的原则”,如12345678h放在存储器中就是7856 3412)。下图是导出来的开机动画的第一张图加上文件头后的16进制数据,以此为例进行分析。T408中的图像有点怪,图像是在电脑上看是垂直翻转的。在分析中为了简化叙述,以一个字(两个字节,如424D就是一个字)为序号单位进行,“h”表示是16进制数。 424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 ...... BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。 一、图像文件头 1)1:图像文件头。424Dh=’BM’,表示是Windows支持的BMP格式。 2)2-3:整个文件大小。4690 0000,为00009046h=36934。 3)4-5:保留,必须设置为0。 4)6-7:从文件开始到位图数据之间的偏移量。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。 5)8-9:位图图信息头长度。 6)10-11:位图宽度,以像素为单位。8000 0000,为00000080h=128。 7)12-13:位图高度,以像素为单位。9000 0000,为00000090h=144。 8)14:位图的位面数,该值总是1。0100,为0001h=1。 二、位图信息头 9)15:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。T408支持的是16位格式。1000为0010h=16。 10)16-17:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩,3(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 0000为00000003h=3。 11)18-19:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于位图宽度×位图高度×每个像素位数。0090 0000为00009000h=80×90×2h=36864。 12)20-21:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。 13)22-23:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。 14)24-25:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。 15)26-27:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。 三、彩色板 16)28-35:彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值: 1字节用于蓝色分量 1字节用于绿色分量 1字节用于红色分量 1字节用于填充符(设置为0) 对于24-位真彩色图像就不使用彩色表,因为位图中的RGB值就代表了每个象素的颜色。但是16位r5g6b5位域彩色图像需要彩色表,看前面的图,与上面的解释不太对得上,应以下面的解释为准。 图中彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中: 00F8 0000为F800h=1111100000000000(二进制),是红色分量的掩码。 E007 0000为07E0h=0000011111100000(二进制),是绿色分量的掩码。 1F00 0000为001Fh=0000000000011111(二进制),是红色分量的掩码。 0000 0000总设置为0。 将掩码跟像素值进行“与”运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取5、6、5位分别就是r、g、b分量值。取出分量值后把r、g、b值分别乘以8、4、8就可以补齐每个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式了。 四、图像数据阵列 17)36-...:每两个字节表示一个像素。阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。 按照前述r5g6b5彩色板规范,我们对图像最左下角手机上图像的的像素在24位模式中的rgb值进行推算(由于垂直翻转,这个像素在手机上看来实际上在左上角): 02F1 为 F102h r=(F102 AND F800)/ 800 × 8 h= F0h=240 g=(F102 AND 07E0)/ 20 × 4 h=20h=32 b=(F102 AND 001F)× 8 h= 10h=16 rgb=F02010h,放在存储器中为1020F0h。 在Photoshop中设一下颜色,rgb取240、32、16可以看到是近红色。 |
3楼: | >>参与讨论 |
作者: liangjingxin 于 2006/10/5 22:03:00 发布:
非常感谢eleven11,让我先领会一下。 |
4楼: | >>参与讨论 |
作者: himalayan 于 2006/12/5 11:15:00 发布:
谢谢,说明 明白了,谢谢分享!! |
5楼: | >>参与讨论 |
作者: 将军令 于 2006/12/12 12:56:00 发布:
不要这么复杂,去下载一个easybmp |
|
|
Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号 |