引言:
Android平台为彩色屏,图片格式为RGB8888,而1.3寸OLED屏为黑白屏,即像素为1,让屏正常工作能采用的方案有:
1. 方便apk开发,减少应用层开发的工作量,采取读取framebuf中的数据,将彩色转为单色图片,用8080并口的方式发送数据至GRAM.
2. 加字库与图片,用单色屏开发的方式,省却图片数据转换的步骤。
当时与客户讨论屏幕显示的效果等细节时,客户需要至少一种字体,二种字号字体显示及跑马灯等动画要求。因没接触过增加字库,不了解apk软件对屏幕的处理;另客户要求的时间短,综合考虑,先采用第1种实现方案。
实现步骤:
1. 在FAE的协助下,OLED屏能正常点亮,并且发送单色图片通过Img2Lcd.exe转换工具转换好的图片数据能正常显示该图片。
2. 图片格式转换:
修改frameworks\base\cmds\screenshot\Screenshot.c,先用截图的方式尝试将RGB8888 转换成RGB888、RGB565、单色图,保存为BMP格式,adb pull出来看实际效果。在网上参考相关转换算法后,转换代码如下:
1). RGB888,其实质是将RGB8888的后一字节给丢掉。
static int get_rgb888_header(int w, int h, BMPHEADER * head, BMPINFO * info)
{
int size = 0;
if (head && info) {
size = w * h * 3;
memset(head, 0, sizeof(* head));
memset(info, 0, sizeof(* info));
head->bfType[0] = 'B';
head->bfType[1] = 'M';
head->bfOffBits = 14 + sizeof(* info);
head->bfSize = head->bfOffBits + size;
head->bfSize = (head->bfSize + 3) & ~3;//windows要求文件大小必须是4的倍数<