欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bmp转rgb565在framebuffer中显示

程序员文章站 2024-01-24 17:12:46
...

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

/*********************************************************************

* 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中,然后拿去显示即可。

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