linux 下将rgb24转化为rgb565的格式

这几天在忙着往appsboot下移植了lcd的驱动,想自己修改显示的图片,本想在网上搜一下转换程序的,但搜了一些都不好用,索性自己写了一个.

说明一下,rgb24的图片文件的格式是B,G,R,的,也就是说,一个像素,首先是一个字节的Blue,再是一个字节的Green,最后是一个字节的Red.然后因为rgb24的文件中没有颜色表选项,所以程序中把颜色表给省掉了.

为做成能在appsboot中显示的数据,也要了解一下appsboot中的565的格式

格式如下:

第一个字节:G2,G1,G0,B4,B3,B2,B1,B0,

第二个字节:R4,R3,R2,R1,R0,G5,G4,G3,

如果这个字节的顺序不对,显示的效果会很差的.

我的目标就是用程序读一个bmp24位的文件,然后生成一个文件,文件中为rgb565的数据,生成的格式如下:

0xff0xd6,0x780xb5,0x530xac,0xd10x6a,0x670x51,0xa3,

0xff0xd6,0x780xb5,0x530xac,0xd10x6a,0x670x51,0xa3

0xff0xd6,0x780xb5,0x530xac,0xd10x6a,0x670x51,0xa3

像这样的数据就可以直接放在appsboot中的数组中用来显示了.

 

下面是程序,好久没有写c程序了,好几个函数都不知道怎么用了,把相关几个函数的用法也顺便发一下:

1.

fread返回的不是字节数,当且仅当下面这么用的时候,返回值才是字节数
char buff[size];
FILE *fp;
...
fread(buff, 1, size, fp);
...
如果是: fread(buff, size, 1, fp)
返回1表示读取了size字节,返回0表示读取数量不够size字节,究竟是多少不知道!!-----------------确实是这样的!

fread 的作用是按定长记录读取文件,返回的是记录数。

from http://blog.csdn.net/jlnhyd/archive/2009/06/04/4242783.aspx

 

2.

void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

 

3.bmp文件的格式和相关结构体可在这里找到:

http://blog.csdn.net/dawn81/archive/2006/02/09/595131.aspx

 

4.rgb24和rgb565的转换在这里可以找到:

http://blog.csdn.net/anufa/archive/2007/03/14/1529484.aspx

但转换时还是要详细了解清楚.

 

程序如下:

#include <unistd.h>   

#includ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值