在S5PV210 ANDROID2.3 平台上做了一个initlogo.rle 显示不正常。

原因是initlogo.rle是16位数据,而我们的LCD是32位的,需要将initlogo.rle转换位32位的。

源码路径:android_source/system/core/init/logo.c

#define fb_size(fb) ((fb)->vi.xres * (fb)->vi.yres * 2)

是用于16位的,修改如下:

#define fb_size(fb) ((fb)->vi.xres * (fb)->vi.yres * ((fb)->vi.bits_per_pixel/8))

添加

#define fb_bpp(fb) ((fb)->vi.bits_per_pixel) //帧缓冲设备的每像素位数


在函数 int load_565rle_image(char *fn) 之前定义16 bits to 32 bits 转换函数如下:
void convert_565rle_to_32(unsigned short val,unsigned short ** pbits,unsigned int *pn)
{
uint32_t rgb32, red, green, blue, alpha;

red = ((val >> 11) & 0x1F);
red = (red << 3) | (red >> 2);
green = ((val >> 5) & 0x3F);
green = (green << 2) | (green >> 4);
blue = ((val) & 0x1F);
blue = (blue << 3) | (blue >> 2);
alpha = 0xff;
rgb32 = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0);
android_memset32((uint32_t *)(*pbits), rgb32, (*pn) << 2);
*pbits += ((*pn) * 2);
}

然后在int load_565rle_image(char *fn)函数中,将
android_memset16(bits, ptr[1], n << 1);
bits += n;
修改如下:
if (fb_bpp(&fb) == 16) { //16位
android_memset16(bits, ptr[1], n << 1);
bits += n;
} else if(32 == fb_bpp(&fb)){ // 32位
convert_565rle_to_32(ptr[1],&bits,&n);
}

这样,即可正常显示了。


不过烧入系统首次启动能够看到图片,重新启动就看不到了,提示没有initlogo.rle:

init: cannot open '/initlogo.rle'

在网上搜索到了如下解决办法:

在system/core/init/init.c[load_565rle_image]-->logo.c中,显示完毕initlogo.rle之后作了 unlink 操作。该操作对于android默认的只读型system.img是没问题,但对于自定义的yaffs格式的可读写型的system.img时就有问题了。会造成将initlogo.rle删除,下次启动时读取不到该文件。可以通过注释掉logo.c的load_565rle_image()中的 unlink(fn)语句来解决该问题。

向解决该问题的前辈鞠躬!



initlogo.rle 制作方法:
1. 制作与LCD尺寸相同的png图片logo.png
2. 将图片转换为raw格式
# convert -depth 8 logo.png rgb:logo.raw
3. 将raw格式转化为rle文件
# android_source/out/host/linux-x86/bin/rgb2565 -rle <logo.raw> initlogo.rle


更多相关文章

  1. Android(安卓)Camera 运行流程
  2. Gallery和GridView浅析
  3. 将Gsensor lis301 driver 升级到 lis331 driver 过程总结,以及and
  4. android图片的打开和缩放时出现oom处理过程
  5. Android(安卓)图片的裁剪与相机调用
  6. Android(安卓)Framework 目录分析
  7. 获取Android手机上的图片和视频缩略图
  8. Android屏幕大小自适应
  9. Android下保存简单网页到本地(包括简单图片链接转换)

随机推荐

  1. android 最全 各种UI效果 UI框架 github
  2. Android实现透明式状态栏
  3. android 向web服务器发送post请求并获取
  4. android 4.1源码下载方法
  5. eclipse上调试android里的程序。
  6. Android的Notification的简介-android学
  7. Android开发性能优化大总结
  8. Android NDK工程创建与编译运行
  9. Android左右连接和USING
  10. htc g11 hboot 2.02.0000 unlock (androi