LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1235|回复: 0

为显示256级灰度图,需把16bpp的framebuffer改为24位,请高手指点一二

[复制链接]
发表于 2007-9-24 11:06:14 | 显示全部楼层 |阅读模式
大家知道,16位的制式为r 5 g 6 b 5,最多能显示2的5次方(即32级灰度),现在16位,640*480的,framebuffer已经可以在我自己的TFT屏上正常运行,但是为了达到256级灰度必须改为24位的framebuffer,

arm是s3c2440,TFT屏是LG.PHILIPS LCD ,为了运行24位的framebuffer,我做了如下修改
1。我把16位驱动中的16位相关都改为24位的了,例如:
if ( var->bits_per_pixel == 24 ) {//change add
var->red.offset = 16; var->red.length = 8;
var->green.offset = 8; var->green.length = 8;
var->blue.offset = 0; var->blue.length = 8;
var->transp.offset = var->transp.length = 0;
}else if ( var->bits_per_pixel == 16 ) {
var->red.offset = 11; var->red.length = 5;
var->green.offset = 5; var->green.length = 6;
var->blue.offset = 0; var->blue.length = 5;
var->transp.offset = var->transp.length = 0;
}
2。因为16位的framebuffer可以运行,我没有修改5个控制寄存器,我修改了地址寄存器2,3,如下

/* 16bpp 24bpp*/
new_regs.lcdsaddr2 = LCDADDR_BASEL(
((unsigned long)VideoPhysicalTemp + (var->xres * 3 * (var->yres/*-1*/)))
>> 1);//change 2 to 3

new_regs.lcdsaddr3 = LCDADDR_OFFSET(0) | (LCDADDR_PAGE(var->xres*3/2) /*>> 1*/);
编译后运行,在屏幕上出现了(横4竖4)共16个小图象,都是24位的(用示波器检测过了), 和许多TFT屏一样我的TFT屏上只有18根数据线(R6 G6 B6),framebuffer作成24位的(R8G8B8),TFT上显示6位的数据(R6G6B6),这样就能显示64级灰度了,我的目标就是显示64级灰度。

本人新手,请大家指教,谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表