硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5498|回复: 12
收起左侧

[emWin] emwin颜色不对,找不到问题所在

[复制链接]

1

主题

6

回帖

1

积分

新手上路

积分
1
发表于 2016-1-25 09:49:13 | 显示全部楼层 |阅读模式
总的表现就是红蓝翻转,
我在LCD_X_Config里面将GUI_DEVICE_CreateAndLink的颜色参数设置为GUICC_565后画出来的线条什么的颜色都正常,
但是BMP图片显示出来就是红蓝反转;
  如果设置为GUICC_M565图片颜色显示正常,但画出来的线条、显示出来的文字颜色红蓝就翻转了。
#DEFINE LCD_SWAP_RB 1也没用 求指点。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2016-1-25 09:57:47 | 显示全部楼层
楼主,你用的是自定义驱动还是官方的驱动,如果是自定义驱动的话,不要做任何优化,仅实现打点和读点,看看是否正常。
回复

使用道具 举报

1

主题

6

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-1-25 11:56:24 | 显示全部楼层
还是不行啊,难道是我驱动的问题?
回复

使用道具 举报

1

主题

6

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-1-25 11:57:04 | 显示全部楼层

回 eric2013 的帖子

eric2013:楼主,你用的是自定义驱动还是官方的驱动,如果是自定义驱动的话,不要做任何优化,仅实现打点和读点,看看是否正常。 (2016-01-25 09:57)
尝试了一下,还是不行啊版主,难道是驱动的问题?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2016-1-25 11:57:05 | 显示全部楼层

回 iceelf 的帖子

iceelf:还是不行啊,难道是我驱动的问题? (2016-01-25 11:56) 
极有可能是驱动问题,裸机先测试下。
回复

使用道具 举报

1

主题

6

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-1-25 12:03:25 | 显示全部楼层

回 eric2013 的帖子

eric2013:极有可能是驱动问题,裸机先测试下。 (2016-01-25 11:57)
裸机也跑过,文字,画矩形什么的颜色也没问题啊
回复

使用道具 举报

1

主题

6

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-1-25 12:04:07 | 显示全部楼层

回 eric2013 的帖子

eric2013:极有可能是驱动问题,裸机先测试下。 (2016-01-25 11:57)
现在就是不管什么图片,画出来就红蓝翻转了
回复

使用道具 举报

1

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2016-1-25 12:26:10 | 显示全部楼层
我之前貌似也有这个问题,你是不是用的bmpcvt软件生成图像数据的时候,选择生成的文件模式有问题。试试High color(565)还是High color(565)red and blue swapped这种模式,我记不清了,你可以尝试下。
回复

使用道具 举报

1

主题

6

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2016-1-25 13:01:59 | 显示全部楼层

回 rainbow 的帖子

rainbow:我之前貌似也有这个问题,你是不是用的bmpcvt软件生成图像数据的时候,选择生成的文件模式有问题。试试High color(565)还是High color(565)red and blue swapped这种模式,我记不清了,你可以尝试下。 (2016-01-25 12:26)
这样生成是可以的,但是我有一些用到PNG图片转换过来就不知道怎么处理了...
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2025-2-20 15:40:52 | 显示全部楼层
遇到问题+1 ,等大神解决
回复

使用道具 举报

2

主题

25

回帖

31

积分

新手上路

积分
31
发表于 2025-3-22 16:48:49 | 显示全部楼层
我用下面的方式,可以正常显示,不知道对你有无帮助,可以试试:

1. LCDConf.c中定义颜色转换格式为 GUICC_M565:
     #define COLOR_CONVERSION           GUICC_M565     

2. 在位图C文件的最后那个结构体的最后一行改为:GUI_DRAW_BMP565
GUI_CONST_STORAGE GUI_BITMAP bmp = {
  480, // xSize
  320, // ySize
  960, // BytesPerLine
  16, // BitsPerPixel
  (unsigned char *)_acfather,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMP565
};
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2025-5-11 20:18:13 | 显示全部楼层
Wolf.Long 发表于 2025-2-20 15:40
遇到问题+1 ,等大神解决

这个问题很早之前解决了忘记总结了。现在把解决的方法说下,因为存在flash中的照片是rgb888 bmp格式的,我出现的问题是由于转换的时候没转换正确,现在贴出RGB888转RGB565的代码。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2025-5-11 20:19:28 | 显示全部楼层
Wolf.Long 发表于 2025-2-20 15:40
遇到问题+1 ,等大神解决

                        /*RGB565使用*/
                        //显示真实数据的指向位置,根据bmp,x,y坐标渲染
                        RGB24 *pDst = (RGB24 *)(bmp_data + bitmap.bfOffBits);
                        RGB24 * source_dat = (RGB24 *)pDst;
                        RGB16 * dst_dat = (RGB16 *)bmp_data1;       
                        for (int y = 0; y < bitmap.biHeight; y++) {
                                        int src_row = (bitmap.biHeight - 1 - y) * bitmap.biWidth;                                                                                                                  // 倒序读原始行
                                        int dst_row = (y+play_list->items[play_index].escapes.coord.y) * WINDOW_WIDTH;     // 正序写目标行
                                       
                                        for (int x = 0; x < bitmap.biWidth; x++) {
                                                        // 交换红蓝分量并转换位宽
                                                        dst_dat[dst_row + x+play_list->items[play_index].escapes.coord.x].red   = (source_dat[src_row + x].blue  >> 3) & 0x1F;
                                                        dst_dat[dst_row + x+play_list->items[play_index].escapes.coord.x].green = (source_dat[src_row + x].green >> 2) & 0x3F;
                                                        dst_dat[dst_row + x+play_list->items[play_index].escapes.coord.x].blue  = (source_dat[src_row + x].red   >> 3) & 0x1F;
                                        }
                        }
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 23:23 , Processed in 0.402376 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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