bmp转rgb565在framebuffer中显示

来源:互联网 发布:intouch软件下载 编辑:程序博客网 时间:2024/05/21 10:10

需求:在kernel中自定义显示图片
解决办法:在网上找了很多方法,都是去替换的,那样就有了很大的局限性,还比较麻烦,所以经过研究最后找到此方法:
首先:得到一副图片eg:jpeg格式的图片,可以用格式工厂或者其他软件吧jpeg格式转换为bmp格式的图片,再用工具(BmpCvt链接如下:http://download.csdn.net/download/sinat_29891353/9938183)(本来想免费的,但选项中现在没有0积分的选项了,所以就选择了1积分,支持一下吧= =)将bmp格式图片转换为rgb565的c文件数组。
工具使用方法:
双击打开,然后打开一副bmp格式的图片如下图:
打开一副bmp文件格式的图片
选择file->Save as…后弹出如下图:
在保存类型中选择C bitmap file
在保存类型中选择C bitmap file,然后可以设置自己喜欢的名字如didi.c如下图:didi.c
然后点击保存弹出如下框:
保存格式
可以选择rgb565,或者rgb565红蓝交换即bgr565,或者rgb565压缩,等
然后选择保存即可,我这里选择的high color 565(即rgb565)。然后再桌面生产如下图所示的c文件:
didi.c
用编程工具打开即可看到类似如下的代码:

/********************************************************************** Source file: didi                                                  ** Dimensions:  176 * 110                                             ** NumColors:   16bpp: 65536                                          ***********************************************************************/#include <stdlib.h>#include "GUI.h"#ifndef GUI_CONST_STORAGE  #define GUI_CONST_STORAGE const#endifstatic GUI_CONST_STORAGE unsigned short acdidi[] = {  0xC327, 0xC327, 0xC327, 0xCB27, 0xCB27, 0xCB27, 0xCB47, 0xCB48, 0xCB48, 0xCB48, 0xCB48, 0xCB48, 0xCB68, 0xCB49, 0xCB69, 0xCB69, 0xCB69, 0xD369, 0xD369, 0xD389, 0xD389, 0xD38A, 0xD38A, 0xD38A, 0xD38A, 0xD38A, 0xD3AA, 0xD3AA, 0xD3AA, 0xD3AA, 0xDBAA,         0xDBAA, 0xDBCA, 0xDBCB, 0xDBCB, 0xDBCB, 0xDBCB, 0xDBCB, 0xDBCB, 0xDBCB, 0xDBEB, 0xDBEC, 0xDBEC, 0xDBEC, 0xDBEC, 0xDBEC, 0xE3EC, 0xE3EC, 0xE40C, 0xE40C, 0xE40C, 0xE40D, 0xE40D, 0xE40D, 0xE40D, 0xE40D, 0xE40D, 0xE40D, 0xE42D, 0xE42D, 0xE42D, 

接着在kenel相关文件中申请的framebuffer中,用memcpy将acdidi[ ]图片数据copy到framebuffer中,然后拿去显示即可。

本次遇到的问题,显示后发现图片形状是对的,但是颜色不对,如下图:红蓝颜色反了
解决办法:在工具生成图片时选择high color (565),red and blue swapped这个选项生成bgr565的即可。
好用就点个赞吧。欢迎转载,但请注明来源,谢谢配合。

原创粉丝点击