天嵌 ARM开发社区

 找回密码
 注册
查看: 1858|回复: 6

菜鸟问题

[复制链接]
bayji 发表于 2010-5-15 22:43:11 | 显示全部楼层 |阅读模式
void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32 c;
int p = 0;
for( y = 0 ; y < l ; y++ )
{
for( x = 0 ; x < h ; x++ )
{
c = bmp[p+1] | (bmp[p]<<8) ;
if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
LCD_BUFFER[y0+y][x0+x] = c ;
p = p + 2 ;
}
}
这个程序里面这3句什么意思
c = bmp[p+1] | (bmp[p]<<8) ;
if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )
LCD_BUFFER[y0+y][x0+x] = c ;
chenenzhi 发表于 2010-5-23 23:22:11 | 显示全部楼层
建议你去看裸奔三部曲之《三天学会ARM9无OS版》里面的几个教程,里面对你这个问题解释得非常清楚。你应该是没有接触过TFT LCD。如果你没看明白,再来发问!
书风轩 发表于 2010-5-26 19:39:51 | 显示全部楼层
1# bayji
一个像素是由16位二进制数组成的 第一句意思就是把相邻的两个8位数取出来 第二句不就是简单的条件语句吗 第三句就是把这个像素值赋给这个数组 就即是把它显示出来 仔细领会一下吧
zr_714 发表于 2010-5-30 17:21:39 | 显示全部楼层
3# 书风轩


呵呵
kira545699636 发表于 2010-5-31 02:13:06 | 显示全部楼层
本帖最后由 kira545699636 于 2010-5-31 02:27 编辑

1# bayji
如果有什么不懂加菜鸟群112683116。。。
kira545699636 发表于 2010-5-31 02:15:59 | 显示全部楼层
1# bayji
对照先前我们对函数的应用,首先先看下函数的几个参数,x0对应的应该是和高度有关的某个坐标值,y0对应的应该是和宽度有关的某个坐标值,h应该是高度值,l应该是宽度值,最后的bmp[]肯定是图片数组。这样我们来看先前用的一条语句Paint_Bmp(0, 0, 320, 240, TQ_LOGO_320240);我们可以分析知道x0,y0应该是图片第一个像素点的起点位置,h,l所控制的是图片的大小,对应我们的屏幕,全屏都显示就是320x240,也就是说我们的屏h最大为320,l最大为240。
下面来分析函数内部,两个for循环完成的是对320x240个像素点的赋值。对于Paint_Bmp(0, 0, 320, 240, TQ_LOGO_320240)我们来分析:
当x0=0,y0=0的初值:先是y=0,x=0,即第一个点(由此知道我们把坐标系的原点定在屏幕显示的左上角屏幕右方为+x方向,屏幕下方为+y方向)然后依次是y=0,x=1…y=0的全部赋值完后再开始赋值y=1的,以此类推,先对第一行320个像素点赋值,然后完成对所有240行的全部像素点赋值。
下面一大段是干嘛的,具体我们来看,c = bmp[p+1] | (bmp[p]<<8) ;肯定是具体把图片数组的值经过处理赋给c,具体如何处理的先不管,然后是if语句,里面的SCR_XSIZE_TFT和SCR_YSIZE_TFT我们go to一下我们知道其实就是两个宏定义:
#define SCR_XSIZE_TFT    (320)
#define SCR_YSIZE_TFT    (240)
这说明我们在使用3.5寸屏幕的时候的,屏幕的像素边界值分别是320和240。
我们这就知道if语句其实就是在x,y坐标在屏幕范围之内,把每个c值赋给LCD_BUFFER[y0+y][x0+x]这个数组,这个数组包含了所有320x240个像素点。注意最后这个p = p + 2 ;我们联系前面的c = bmp[p+1] | (bmp[p]<<8)语句,我终于明白了这条语句的作用,就是让bmp[]数组每两位组成一个像素点,其中数组两个数前面的数左移8位作为16位色的高八位,后面的数作为低八位,赋值给c,按照逐行扫描的方式复制给屏幕的BUFFER,即实现了全屏显示一张图片。
xyhyou 发表于 2010-5-31 09:41:31 | 显示全部楼层
:)楼上介绍的好详细
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-10-6 08:37 , Processed in 1.032266 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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