bmp转rgb565在framebuffer中显示
需求:在kernel中自定义显示图片
解决办法:在网上找了很多方法,都是去替换的,那样就有了很大的局限性,还比较麻烦,所以经过研究最后找到此方法:
首先:得到一副图片eg:jpeg格式的图片,可以用格式工厂或者其他软件吧jpeg格式转换为bmp格式的图片,再用工具(BmpCvt链接如下:http://download.csdn.net/download/sinat_29891353/9938183)(本来想免费的,但选项中现在没有0积分的选项了,所以就选择了1积分,支持一下吧= =)将bmp格式图片转换为rgb565的c文件数组。
工具使用方法:
双击打开,然后打开一副bmp格式的图片如下图:
选择file->Save as…后弹出如下图:
在保存类型中选择C bitmap file,然后可以设置自己喜欢的名字如didi.c如下图:
然后点击保存弹出如下框:
可以选择rgb565,或者rgb565红蓝交换即bgr565,或者rgb565压缩,等
然后选择保存即可,我这里选择的high color 565(即rgb565)。然后再桌面生产如下图所示的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
#endif
static 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的即可。
好用就点个赞吧。欢迎转载,但请注明来源,谢谢配合。
上一篇: Pandas基础入门(一)
下一篇: 数据结构之栈和队列的实现