程序附件:
framebuff.rar 在程序中,对 fb_fix_screeninfo 中的line_length 有疑问??
fb_fix_screenifo 是固定参数,是不能变的
line_length 表示:一行的字节数 ???
我打印 输出 line_length 是 640 ,这是上面意思呢 ??
一行有 640 个字节呢???
- // Figure out where in memory to put the pixel 指出内存的哪里防止像素点
-
for ( y = 100; y < 200; y++ )
-
for ( x = 100; x < 300; x++ )
-
{
-
-
location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + //vinfo 可变参数
-
(y+vinfo.yoffset) * finfo.line_length; //finfo 不可变参数 //这行代码不是很懂 line_length=640 是 vinfo.xres的2倍
-
-
if(y==100||y==102||y==110||y==120||y==200)
-
{
-
if(x==100||x==102||x==103||x==110||x==120||x==200)
-
{
-
printf("vinfo.xoffset= %d\n",vinfo.xoffset);
-
printf("vinfo.yoffset= %d\n",vinfo.yoffset);
-
printf("finfo.line_length= %d\n\n",finfo.line_length);
-
}
-
}
-
//输出结果:xoffset=0,yoffset=0,line_length=640
-
-
if ( vinfo.bits_per_pixel == 32 )
-
{
-
*(fbp + location) = 100; // Some blue
-
*(fbp + location + 1) = 15+(x-100)/2; // A little green
-
*(fbp + location + 2) = 200-(y-100)/5; // A lot of red
-
*(fbp + location + 3) = 0; // No transparency
-
}
-
else
-
{ //assume 16bpp 假设 16bpp bit per pixel
-
int b = 10;
-
int g = (x-100)/6; // A little green
-
int r = 31-(y-100)/16; // A lot of red
-
unsigned short int t = r<<11 | g << 5 | b;
-
*((unsigned short int*)(fbp + location)) = t;
-
} //fbp=mmap() 映射的首地址
-
-
}
在 源程序中,location 代码如下;- location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + //vinfo 可变参数
-
(y+vinfo.yoffset) * finfo.line_length; //finfo 不可变参数 //这行代码不是很懂 line_length=640 是 vinfo.xres的2倍
在 《设备驱动开发详解 》LCD设备驱动代码中是 这么写的
- //Drax 3 rect with graduate RED/GREN/BLUE
-
-
for(i=0;i<3;i++)
-
for(y=i*(vinfo.yres/3);y<(i+1)*(vinfo.yres/3);y++)
-
{
-
for(x=0;x<info.xres;x++)
-
{
-
long location=x*2+y*vinfo.xres*2;
-
int r=0,g=0,b=0;
-
unsigned short rgb;
-
if(i==0)
-
r=((x*1.0)/vinfo.xres)*32;
-
if(i==1)
-
g=((x*1.0)/vinfo.xres)*64;
-
if(i==2)
-
b=((x*1.0)/vinfo.xres)*32;
-
-
rgb=(r<<11)|(g<<5)|(b);
-
*(unsigned short*)(fbp+location)=rgb;
-
}
-
}
总结上两个代码: long location=x*2+y*vinfo.xres*2; (x,y) 像素坐标, vinffo.xres=320 x的范围 vinfo.xres*2=finfo.line_length 就按照着这种方法写了,还是不知道这是什么回事,
等功力 深了以后,看看。。。。
阅读(3144) | 评论(0) | 转发(0) |