OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3374|回复: 3

EMWIN的实验为什么我的截图有的会失真呢

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-6-13
在线时间
31 小时
发表于 2016-9-23 10:27:54 | 显示全部楼层 |阅读模式
11金钱
本帖最后由 2314284512 于 2016-9-23 16:15 编辑

      用的是原子哥的截图函数 void create_bmppicture(u8 *filename,int x0,int y0,int Xsize, int Ysize),自己弄的库函数版本就没问题,自己弄的寄存器版本截图是失真了。(注:人的照片,肤色失真)
      另外:我用的是战舰的,代码可下载。

Picture_Display寄存器版.rar

7.81 MB, 下载次数: 277

寄存器版

Picture_Display库函数版.rar

14.13 MB, 下载次数: 54

库函数版

最佳答案

查看完整内容[请看2#楼]

自己解决了,孜孜不倦则必有所得,寄存器版本的EMWIN移植的时候GUIDRV_Template.c文件移植的读点函数本身就有误,在TFT_LCD.c文件里有它的原型,错误版本如下: /* 逐个读点 */ u16 LCD_ReadPoint(u16 x,u16 y) { u16 r,g,b; TFT_LCD->TFT_LCD_REG=0X2A00; TFT_LCD->TFT_LCD_RAM=x>>8; TFT_LCD->TFT_LCD_REG=0X2 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-6-13
在线时间
31 小时
 楼主| 发表于 2016-9-23 10:27:55 | 显示全部楼层
自己解决了,孜孜不倦则必有所得,寄存器版本的EMWIN移植的时候GUIDRV_Template.c文件移植的读点函数本身就有误,在TFT_LCD.c文件里有它的原型,错误版本如下:

/*        逐个读点                */
u16 LCD_ReadPoint(u16 x,u16 y)
{
                u16 r,g,b;
                TFT_LCD->TFT_LCD_REG=0X2A00;
                TFT_LCD->TFT_LCD_RAM=x>>8;                 
                TFT_LCD->TFT_LCD_REG=0X2A01;
                TFT_LCD->TFT_LCD_RAM=x&0XFF;                        
                TFT_LCD->TFT_LCD_REG=0X2B00;
                TFT_LCD->TFT_LCD_RAM=y>>8;                  
                TFT_LCD->TFT_LCD_REG=0X2B01;
                TFT_LCD->TFT_LCD_RAM=y&0XFF;
                TFT_LCD->TFT_LCD_REG=0X2E00;
                r=TFT_LCD->TFT_LCD_RAM;
                opt_delay(2);
                r=TFT_LCD->TFT_LCD_RAM;
                opt_delay(2);         
                b=TFT_LCD->TFT_LCD_RAM;
                g=r&0XFF;                //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
                return (((r>>11)<<11)|((g<<3))|(b>>11));        
}

正确版本如下:
/*        逐个读点                */
u16 LCD_ReadPoint(u16 x,u16 y)
{
                u16 r,g,b;
                TFT_LCD->TFT_LCD_REG=0X2A00;
                TFT_LCD->TFT_LCD_RAM=x>>8;                 
                TFT_LCD->TFT_LCD_REG=0X2A01;
                TFT_LCD->TFT_LCD_RAM=x&0XFF;                        
                TFT_LCD->TFT_LCD_REG=0X2B00;
                TFT_LCD->TFT_LCD_RAM=y>>8;                  
                TFT_LCD->TFT_LCD_REG=0X2B01;
                TFT_LCD->TFT_LCD_RAM=y&0XFF;
                TFT_LCD->TFT_LCD_REG=0X2E00;
                r=TFT_LCD->TFT_LCD_RAM;
                opt_delay(2);
                r=TFT_LCD->TFT_LCD_RAM;
                opt_delay(2);         
                b=TFT_LCD->TFT_LCD_RAM;
                g=r&0XFC;                //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
                return (((r>>11)<<11)|((g<<3))|(b>>11));        
}

仅仅是g=r&0XFC(正确)g=r&0XFF(错误)这个问题搞了一天。

改之后寄存器版本的EMWIN的移植还是可以的,用STemwin的综合演示例程弄过了。
另外UCOSIII的也是可以的,已经用来跑过所有原子个的扩展例程了。欢迎大家参考
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-6-13
在线时间
31 小时
 楼主| 发表于 2016-9-23 13:44:07 | 显示全部楼层
有大师帮帮不,我这两代码究竟寄存器的有哪不对?
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-6-13
在线时间
31 小时
 楼主| 发表于 2016-9-23 21:18:24 | 显示全部楼层
欢迎大家参考
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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