※ S308中的8位BMP图像分析及制作 ※

lefe

普通会员
2003-06-06
917
0
0
  S308中的部分外屏图是8位256色的BMP格式。为了方便大家对S308中8位BMP的理解和制作,试作以下分析。以下叙述中0x起头的数是16进制数,PS7指Potoshop7.0。

  一、S308中8位BMP图像的颜色范围
  我们知道,任何一幅图像,无论是什么格式,最终都要转换为RGB模式,每个像素的颜色,由它的R、G、B三个分量决定。不同格式的BMP,分量的取值范围是不同的。如24位BMP,RGB分量的取值范围都是{0,1,2……255}。对S308中的8位BMP,RGB分量取值范围如下:
  R∈{x|x=i*255/3,i=0,1,2,3}={0,85,170,255}={00,55,AA,FF}(16进制);
  G、B∈{x|x=round(i*255/7),i=0,1...7}={0,36,73,109,146,182,219,255}={00,24,49,6D,92,B6,DB,FF}(16进制);
  注:Round(X)——将X四舍五入取整数值。
  这样S308中8位BMP颜色数为4*8*8=256色。根据RGB分量的取值范围,可以组合出这256种颜色,见“图一 调色板图像”。也就是说,S308外屏实际能够显示的颜色,都是在这些颜色范围之内。图片:图一 调色板图像.jpg

二、Windows中8位BMP图像格式
  在Windows中,8位BMP图像=文件头+像素阵列=文件信息头+调色板+像素阵列。
  1、文件信息头
  参见蓝色T408坛高级DIY文章“BMP格式图像文件分析”中对文件信息头的解释,一般8位BMP文件信息头如下:
  424D 3804 0000 0000 0000 3604 0000 2800 0000 6000 0000 4000 0000 0100 0800 0000
  0000 0204 0000 120B 0000 120B 0000 0000 0000 0000 0000
  上图中,6000 0000表示图像宽为0x00000060=96像素,4000 0000表示图像高为0x00000040=64像素。实际应用时,把上面的文件信息头加到图像数据最前面,再更改图像宽、高即可,别的数据不用修改。
  2、调色板
  调色板定义了最多256种颜色,每种颜色由4个字节组成,前3个分别表示B、G、R分量值,第4个取00。例如6D92AA00表示BGR=(0x6D,0x92,0xAA)=(109,146,170)的颜色。调色板紧跟在文件信息头之后,占用字节数=颜色数*4,如果是256色则字节数为1024。S308调色板的编码见“图二 调色板编码”,对应的颜色见“图一调色板图像”,左上角是0号颜色,右下角是0xFF=255号颜色。在S308中这个调色板似乎并不存在,而是通过算法实现,这样可以省下1024个字节的空间。
图片:图二 调色板编码.jpg

3、像素阵列
  Windows中的8位BMP图像,用一个字节(8位二进制位)表示一个像素,在显示图像时,每个像素的颜色由这个字节值查调色板得出颜色的RGB值,这个字节值实际上是调色板颜色索引,所以在PS7中8位BMP图像模式属于索引颜色。例如某像素值为0x12=18,按“图二 调色板编码”可以查出第18号颜色的BGR分量值为0092AA=(0,146,170)。在像素阵列中,每一个字节表示图像的左下角,最后一个字节表示图像的右下角。

  三、导出图像
  1、将图像数据转换为Windows的8位BMP
  把S308的SRE文件转换为BIN格式,按照地址及占用空间把S308中的8位BMP图像数据提出,再加上文件头(文件信息头+调色板),更改宽、高值,就做成了Windows认可的8位BMP文件,可以用PS7直接打开,注意导出的图像是垂直翻转的。文件头见附件。
  2、用程序代码将图像数据转换为24位BMP
  下面的公式中,C为一个字节表示的像素值,R、G、B为按索引值C在调色板中查出的像素RGB分量值,在存储器中顺序为BGR。
  B=Round(Int(C/32)*255/7);
  G=Round((Int(C/4) Mod 8)*255/7);
  R=(C Mod 4)*85;
  注:Round(X)——将X四舍五入取整数值;
    Int(X)——取X的整数部分;
    X Mod Y——X/Y的余数。
  将BIN中8位BMP图像阵列每个像素的字节都进行这样的转换,得到的24位图像阵列占用空间是8位的3倍。再加上24位BMP图像文件头,即可导出为24位BMP。

  四、导入图像
  1、用PS7转换为8位BMP
  首先PS7打开一幅从S08中导出的8位BMP图像,将颜色表保存下来,再打开将要导入的图像,用保存的颜色表将图像转换为索引颜色模式,更改为符合规格的大小,并垂直翻转,保存后将此图像的像素阵列按地址替换进S308的BIN文件即可。8位BMP的制作方法后面再进行详细讲述。
  2、用程序代码将24位BMP转换为8位BMP
  24位BMP用三个字节表示一个像素,按地址从从高到低分别表示R、G、B分量值。
  下面的公式中,R、G、B为24位BMP中像素的RGB分量值,C为8位BMP中一个字节表示的像素值。
  C=Round(B*7/255)*32+Round(G*7/255)*4+Round(R*3/255)
  将24位BMP的像素阵列中每个像素的三个字节进行这样的转换,得到的8位图素阵列占用空间是24位的1/3。再将8位像素阵列按图像宽进行垂直翻转,然后就可以替换进S308的BIN文件。

  五、8位BMP图像制作
  Windows中的索引颜色模式图像,比如GIF和8位的BMP等都属于这个范畴,它们的调色板都是可以变动的。也就是说,索引图像实际显示的颜色范围可以是系统支持的任意颜色,只是在一幅图像中的颜色数目不能超过256种。在Windows中,如果一幅图像的颜色数目不多于256种,那么选择实际颜色作为调色板的索引图像就不会产生任何失真。而S308由于外屏的颜色范围是固定的,它的8位BMP的调色板也是固定的,相比Windows的索引图像,在绝大多数情况下,尤其是转换颜色数多、过渡色多的照片类图像,会产生非常大的失真,运用PS7中的仿色功能,可以稍稍起到改善效果。如果是转换纯色加线条的图像,比如大多数GIF或是8位BMP,这样的图像通常是卡通类的,一般颜色数少、过渡色很少,在进行转换时,不要使用仿色,得到的图像可能在颜色上会有些差异,但是能很好地保持图像本身的纯色性,效果还是不错的。因此对照片类和卡通类的图像,要选择不同的转换方法。
  用程序代码实现的话,因为加仿色功能比较麻烦,而且仿色效果有限,所以基本上不适于转换照片类,而卡通类不需要仿色,用代码转换是可以的。
  下面介绍一下用PS7制作适于S308的8位BMP。
  1、获取S308的8位BMP调色板
  启动PS7,打开任意一幅从S308中导出的8位BMP,进菜单图像->模式->颜色表,在弹出的颜色表窗口中选择存储,将颜色表保存下来。
  2、调整图像大小
  打开将要转换的图像,把图像调整到符合规格的大小。这个过程相信大多数机友都会的吧。
  3、转换为RGB模式
  进菜单图像->模式->RGB颜色,将图像转换为RGB颜色模式。
  4、转换为索引颜色模式
  见“图三 转换为8位BMP”。进菜单图像->模式->索引颜色,弹出索引颜色窗口,在<1>调板下拉框里选择自定,弹出颜色表窗口,点击<2>载入按钮,选择前面保存的颜色表,确定后返回到索引颜色窗口。窗口中的选项<3>,根据不同的情况要进行不同的设置。首先把<4>预览打上勾,以便观察转换效果。
照片类图像:在选项<3>中,仿色下拉框中选择扩散;数量百分值一般过渡区域大的图像需要较大的数值,可以边改大小边观察图像效果;保留实际颜色选项一般对图像质量影响不大。可以看到,图像会产生很多的斑点,这是扩散仿色产生的,如果不选择扩散,极易产生色调分离,效果更加不能接受。大量斑点的产生,除了256色的限制外,更重要的是因为固定了颜色表。
  卡通类图像:在选项<3>中,仿色下拉框中选择无即可,此时图像的颜色会发生变化,但是不会改变图像的纯色性,如果觉得颜色的改变差异过大,也可以调整颜色。
图片:图三 转换为8位BMP.jpg

  5、翻转图像
  S308中的图像是垂直翻转的,所以需要把将要换进去的图像也进行垂直翻转。进菜单图像->旋转画布->垂直翻转画布。如果图像是准备用软件换进S308的BIN,那么这一步就不需要了,软件会完成翻转的。
  6、保存图像
  进菜单文件->存储为,弹出的存储为窗口中格式选择BMP,起好名,确定,弹出BMP选项窗口,压缩(RLE)及翻转行序前都不要打勾,确定后就得到了符合S308要求的8位BMP文件。

  六、图像效果比较
  在前面已经多次提到由于S308的8位BMP调色板是固定的,对照片类图像的表现效果很不理想,加仿色稍有改善,而卡通类的图像效果基本上是不错的。我的意见是,最好不要使用照片类图像作为外屏图。为了加深大家的理解,请参见“图四 BMP图像效果比较”,图像均是128*96像素大小,注意观察卡通类在采用扩散仿色后出现了斑点,扩散百分比越高,斑点越多。
图片:图四 BMP图像效果比较.jpg

  请注意:Windows的BMP格式要求像素阵列每扫描行的占用字节数必须能被4整除,如果不能,需要补零,而手机中的BMP则无此约束。在作转换时,需要补零或是去除零。详见T4坛高级DIY文章“BMP格式图像文件补充”。
 

lefe

普通会员
2003-06-06
917
0
0
  S308中的部分外屏图是8位256色的BMP格式。为了方便大家对S308中8位BMP的理解和制作,试作以下分析。以下叙述中0x起头的数是16进制数,PS7指Potoshop7.0。

  一、S308中8位BMP图像的颜色范围
  我们知道,任何一幅图像,无论是什么格式,最终都要转换为RGB模式,每个像素的颜色,由它的R、G、B三个分量决定。不同格式的BMP,分量的取值范围是不同的。如24位BMP,RGB分量的取值范围都是{0,1,2……255}。对S308中的8位BMP,RGB分量取值范围如下:
  R∈{x|x=i*255/3,i=0,1,2,3}={0,85,170,255}={00,55,AA,FF}(16进制);
  G、B∈{x|x=round(i*255/7),i=0,1...7}={0,36,73,109,146,182,219,255}={00,24,49,6D,92,B6,DB,FF}(16进制);
  注:Round(X)——将X四舍五入取整数值。
  这样S308中8位BMP颜色数为4*8*8=256色。根据RGB分量的取值范围,可以组合出这256种颜色,见“图一 调色板图像”。也就是说,S308外屏实际能够显示的颜色,都是在这些颜色范围之内。图片:图一 调色板图像.jpg

二、Windows中8位BMP图像格式
  在Windows中,8位BMP图像=文件头+像素阵列=文件信息头+调色板+像素阵列。
  1、文件信息头
  参见蓝色T408坛高级DIY文章“BMP格式图像文件分析”中对文件信息头的解释,一般8位BMP文件信息头如下:
  424D 3804 0000 0000 0000 3604 0000 2800 0000 6000 0000 4000 0000 0100 0800 0000
  0000 0204 0000 120B 0000 120B 0000 0000 0000 0000 0000
  上图中,6000 0000表示图像宽为0x00000060=96像素,4000 0000表示图像高为0x00000040=64像素。实际应用时,把上面的文件信息头加到图像数据最前面,再更改图像宽、高即可,别的数据不用修改。
  2、调色板
  调色板定义了最多256种颜色,每种颜色由4个字节组成,前3个分别表示B、G、R分量值,第4个取00。例如6D92AA00表示BGR=(0x6D,0x92,0xAA)=(109,146,170)的颜色。调色板紧跟在文件信息头之后,占用字节数=颜色数*4,如果是256色则字节数为1024。S308调色板的编码见“图二 调色板编码”,对应的颜色见“图一调色板图像”,左上角是0号颜色,右下角是0xFF=255号颜色。在S308中这个调色板似乎并不存在,而是通过算法实现,这样可以省下1024个字节的空间。
图片:图二 调色板编码.jpg

3、像素阵列
  Windows中的8位BMP图像,用一个字节(8位二进制位)表示一个像素,在显示图像时,每个像素的颜色由这个字节值查调色板得出颜色的RGB值,这个字节值实际上是调色板颜色索引,所以在PS7中8位BMP图像模式属于索引颜色。例如某像素值为0x12=18,按“图二 调色板编码”可以查出第18号颜色的BGR分量值为0092AA=(0,146,170)。在像素阵列中,每一个字节表示图像的左下角,最后一个字节表示图像的右下角。

  三、导出图像
  1、将图像数据转换为Windows的8位BMP
  把S308的SRE文件转换为BIN格式,按照地址及占用空间把S308中的8位BMP图像数据提出,再加上文件头(文件信息头+调色板),更改宽、高值,就做成了Windows认可的8位BMP文件,可以用PS7直接打开,注意导出的图像是垂直翻转的。文件头见附件。
  2、用程序代码将图像数据转换为24位BMP
  下面的公式中,C为一个字节表示的像素值,R、G、B为按索引值C在调色板中查出的像素RGB分量值,在存储器中顺序为BGR。
  B=Round(Int(C/32)*255/7);
  G=Round((Int(C/4) Mod 8)*255/7);
  R=(C Mod 4)*85;
  注:Round(X)——将X四舍五入取整数值;
    Int(X)——取X的整数部分;
    X Mod Y——X/Y的余数。
  将BIN中8位BMP图像阵列每个像素的字节都进行这样的转换,得到的24位图像阵列占用空间是8位的3倍。再加上24位BMP图像文件头,即可导出为24位BMP。

  四、导入图像
  1、用PS7转换为8位BMP
  首先PS7打开一幅从S08中导出的8位BMP图像,将颜色表保存下来,再打开将要导入的图像,用保存的颜色表将图像转换为索引颜色模式,更改为符合规格的大小,并垂直翻转,保存后将此图像的像素阵列按地址替换进S308的BIN文件即可。8位BMP的制作方法后面再进行详细讲述。
  2、用程序代码将24位BMP转换为8位BMP
  24位BMP用三个字节表示一个像素,按地址从从高到低分别表示R、G、B分量值。
  下面的公式中,R、G、B为24位BMP中像素的RGB分量值,C为8位BMP中一个字节表示的像素值。
  C=Round(B*7/255)*32+Round(G*7/255)*4+Round(R*3/255)
  将24位BMP的像素阵列中每个像素的三个字节进行这样的转换,得到的8位图素阵列占用空间是24位的1/3。再将8位像素阵列按图像宽进行垂直翻转,然后就可以替换进S308的BIN文件。

  五、8位BMP图像制作
  Windows中的索引颜色模式图像,比如GIF和8位的BMP等都属于这个范畴,它们的调色板都是可以变动的。也就是说,索引图像实际显示的颜色范围可以是系统支持的任意颜色,只是在一幅图像中的颜色数目不能超过256种。在Windows中,如果一幅图像的颜色数目不多于256种,那么选择实际颜色作为调色板的索引图像就不会产生任何失真。而S308由于外屏的颜色范围是固定的,它的8位BMP的调色板也是固定的,相比Windows的索引图像,在绝大多数情况下,尤其是转换颜色数多、过渡色多的照片类图像,会产生非常大的失真,运用PS7中的仿色功能,可以稍稍起到改善效果。如果是转换纯色加线条的图像,比如大多数GIF或是8位BMP,这样的图像通常是卡通类的,一般颜色数少、过渡色很少,在进行转换时,不要使用仿色,得到的图像可能在颜色上会有些差异,但是能很好地保持图像本身的纯色性,效果还是不错的。因此对照片类和卡通类的图像,要选择不同的转换方法。
  用程序代码实现的话,因为加仿色功能比较麻烦,而且仿色效果有限,所以基本上不适于转换照片类,而卡通类不需要仿色,用代码转换是可以的。
  下面介绍一下用PS7制作适于S308的8位BMP。
  1、获取S308的8位BMP调色板
  启动PS7,打开任意一幅从S308中导出的8位BMP,进菜单图像->模式->颜色表,在弹出的颜色表窗口中选择存储,将颜色表保存下来。
  2、调整图像大小
  打开将要转换的图像,把图像调整到符合规格的大小。这个过程相信大多数机友都会的吧。
  3、转换为RGB模式
  进菜单图像->模式->RGB颜色,将图像转换为RGB颜色模式。
  4、转换为索引颜色模式
  见“图三 转换为8位BMP”。进菜单图像->模式->索引颜色,弹出索引颜色窗口,在<1>调板下拉框里选择自定,弹出颜色表窗口,点击<2>载入按钮,选择前面保存的颜色表,确定后返回到索引颜色窗口。窗口中的选项<3>,根据不同的情况要进行不同的设置。首先把<4>预览打上勾,以便观察转换效果。
照片类图像:在选项<3>中,仿色下拉框中选择扩散;数量百分值一般过渡区域大的图像需要较大的数值,可以边改大小边观察图像效果;保留实际颜色选项一般对图像质量影响不大。可以看到,图像会产生很多的斑点,这是扩散仿色产生的,如果不选择扩散,极易产生色调分离,效果更加不能接受。大量斑点的产生,除了256色的限制外,更重要的是因为固定了颜色表。
  卡通类图像:在选项<3>中,仿色下拉框中选择无即可,此时图像的颜色会发生变化,但是不会改变图像的纯色性,如果觉得颜色的改变差异过大,也可以调整颜色。
图片:图三 转换为8位BMP.jpg

  5、翻转图像
  S308中的图像是垂直翻转的,所以需要把将要换进去的图像也进行垂直翻转。进菜单图像->旋转画布->垂直翻转画布。如果图像是准备用软件换进S308的BIN,那么这一步就不需要了,软件会完成翻转的。
  6、保存图像
  进菜单文件->存储为,弹出的存储为窗口中格式选择BMP,起好名,确定,弹出BMP选项窗口,压缩(RLE)及翻转行序前都不要打勾,确定后就得到了符合S308要求的8位BMP文件。

  六、图像效果比较
  在前面已经多次提到由于S308的8位BMP调色板是固定的,对照片类图像的表现效果很不理想,加仿色稍有改善,而卡通类的图像效果基本上是不错的。我的意见是,最好不要使用照片类图像作为外屏图。为了加深大家的理解,请参见“图四 BMP图像效果比较”,图像均是128*96像素大小,注意观察卡通类在采用扩散仿色后出现了斑点,扩散百分比越高,斑点越多。
图片:图四 BMP图像效果比较.jpg

  请注意:Windows的BMP格式要求像素阵列每扫描行的占用字节数必须能被4整除,如果不能,需要补零,而手机中的BMP则无此约束。在作转换时,需要补零或是去除零。详见T4坛高级DIY文章“BMP格式图像文件补充”。
 

lefe

普通会员
2003-06-06
917
0
0
我觉得我是在S308发的啊,好不容易发完了,居然会在这里~~~~~~~~~~~~~~~~~~~~~~~~
 

wuwang

管理员
2003-06-01
7,277
0
0
哈哈哈哈。。。。笑死我了啊,龙!!!!!哈哈!!

我给你移。。。。。哈哈

积分+2
 

roolf

普通会员
2003-06-01
716
0
0
这么好的帖子,加两分哪够啊,强烈建议在加2分,嘿嘿~~~~~~~~~
 

micole

普通会员
2003-06-02
207
1
16
牛人,下次发贴时注意点了,别又发到图片区了,哈哈哈!
 

疯狂足球

普通会员
2003-06-02
218
0
0
这可不是一般的牛逼啊~~~~!
我看的心都是毛的啊!!!
楼主,你比熊猫还熊啊!
 

lefe

普通会员
2003-06-06
917
0
0
嗯嗯,我也想吃果果了~~~~~
经一夜苦思,终于知道为什么发错了地方~~~
昨晚在相册区看看MM走了神,开了S308又继续看MM,然后又发,结果就发到相册区了~~~~~
谁叫蓝色的PLMM多啊!