OpenEdv-开源电子网

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

关于LTDC_Color_Fill仅支持u16,RGB565格式的颜色数组填充的问题

[复制链接]

6

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2014-11-26
在线时间
91 小时
发表于 2021-5-19 18:11:22 | 显示全部楼层 |阅读模式
20金钱
111.png //在指定区域内填充指定颜色块,DMA2D填充
//此函数仅支持u16,RGB565格式的颜色数组填充.
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为ex-sx+1)*(ey-sy+1)  
//注意:sx,ex,不能大于lcddev.width-1;sy,ey,不能大于lcddev.height-1!!!
//color:要填充的颜色数组首地址
void LTDC_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)
{
        u32 psx,psy,pex,pey;        //以LCD面板为基准的坐标系,不随横竖屏变化而变化
        u32 timeout=0;
        u16 offline;
        u32 addr;
        //坐标系转换
        if(lcdltdc.dir)        //横屏
        {
                psx=sx;psy=sy;
                pex=ex;pey=ey;
        }else                        //竖屏
        {
                psx=sy;psy=lcdltdc.pheight-ex-1;
                pex=ey;pey=lcdltdc.pheight-sx-1;
        }
        offline=lcdltdc.pwidth-(pex-psx+1);
        addr=((u32)ltdc_framebuf[lcdltdc.activelayer]+lcdltdc.pixsize*(lcdltdc.pwidth*psy+psx));
        __HAL_RCC_DMA2D_CLK_ENABLE();        //使能DM2D时钟
        DMA2D->CR&=~(DMA2D_CR_START);        //先停止DMA2D
        DMA2D->CR=DMA2D_M2M;                        //存储器到存储器模式
        DMA2D->FGPFCCR=LCD_PIXFORMAT;        //设置颜色格式//  LCD_PIXFORMAT   LCD_PIXEL_FORMAT_RGB565
        DMA2D->FGOR=0;                                        //前景层行偏移为0
        DMA2D->OOR=offline;                                //设置行偏移
        DMA2D->FGMAR=(u32)color;                //源地址
        DMA2D->OMAR=addr;                                //输出存储器地址
        DMA2D->NLR=(pey-psy+1)|((pex-psx+1)<<16);        //设定行数寄存器
        DMA2D->CR|=DMA2D_CR_START;                                        //启动DMA2D
        while((DMA2D->ISR&(DMA2D_FLAG_TC))==0)                //等待传输完成
        {
                timeout++;
                if(timeout>0X1FFFFF)break;        //超时退出
        }
        DMA2D->IFCR|=DMA2D_FLAG_TC;                                //清除传输完成标志         
}

这个函数写的是 仅支持u16,RGB565格式的颜色数组填充
如果我想让它显示 RGB888格式的内容 该怎修改呢 当然除了修改 DMA2D->FGPFCCR=LCD_PIXFORMAT;//设置颜色格式
还需要修改什么地方呢   
我用的这个函数显示图片  和原本的图片显示严重失真  请看下图
3.png 2.png
第一张是原图 第二张成了这个样子 请各位帮忙看一下 非常感谢

最佳答案

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

经排除 是例程中tjpgd.c的解码问题 图片格式是对的 但解码出来是BGR888格式 将其更改为RGB888就好多了 但是 解码后的图片 颜色发白 有种过曝的感觉
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2014-11-26
在线时间
91 小时
 楼主| 发表于 2021-5-19 18:11:23 | 显示全部楼层
LcwSwust 发表于 2021-5-20 14:48
颜色问题,似乎因为windows的bmp图像数据是按B、G、R的顺序排列的,你看是不是整成RGB了。

经排除 是例程中tjpgd.c的解码问题 图片格式是对的 但解码出来是BGR888格式 将其更改为RGB888就好多了 但是  解码后的图片 颜色发白 有种过曝的感觉
回复

使用道具 举报

6

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2014-11-26
在线时间
91 小时
 楼主| 发表于 2021-5-20 09:17:07 | 显示全部楼层
自己顶一下 求救
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2021-5-20 14:48:00 | 显示全部楼层
颜色问题,似乎因为windows的bmp图像数据是按B、G、R的顺序排列的,你看是不是整成RGB了。
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 21:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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