您尚未登录。

楼主 # 2021-11-22 10:09:28

smiletiger
会员
注册时间: 2021-07-28
已发帖子: 32
积分: 2

f1c100s+lvgl 渐变色显示效果那么差的吗,

f1c100s+lvgl 渐变色显示效果那么差的吗,,移植了lvgl,硬件连接使用RGB666连接 ,lvgl配置为16位色,下载到液晶屏里面效果好差,之前用的stm32+touchgfx使用的还是RGB565,效果完全可以和手机一样,不知道为什么lvgl效果那么差,

2.png_20211122100704.jpg

大家看看原图第一张,之前用touchgfx就是那个效果,第二个图就是lvgl的效果,这中间 的一圈圈渐变太难受了,lvgl字体显示也比较毛刺,

离线

#1 2021-11-22 12:36:23

armstrong
会员
注册时间: 2019-04-10
已发帖子: 204
积分: 183.5

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

上图是电脑截屏,下图是实际LCD屏,效果明显不同。

离线

#2 2021-11-22 13:11:02

shangwudong
会员
注册时间: 2019-10-09
已发帖子: 7
积分: 1.5

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

PC上是24位888吧,下面的LCD图看样子是16位565。

离线

#3 2021-11-22 13:52:05

sblpp
会员
注册时间: 2018-02-14
已发帖子: 140
积分: 104

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

图片转成16位时 就容易出现这样的问题,只有用同色填充的时候才不会。
很奇怪

离线

楼主 #4 2021-11-22 14:16:41

smiletiger
会员
注册时间: 2021-07-28
已发帖子: 32
积分: 2

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

armstrong 说:

上图是电脑截屏,下图是实际LCD屏,效果明显不同。

我的意思是我另外一个板子用touchgfx做的,液晶屏实际上接线也是565,效果就是好电脑上的效果

离线

楼主 #5 2021-11-22 14:40:51

smiletiger
会员
注册时间: 2021-07-28
已发帖子: 32
积分: 2

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

111.png

我找来了用touchgfx做的界面了,液晶屏是rgb565 16线的,

f1c100s用的还是rgb666 18线,效果完全不能比,我看f1c100s资料里面说支持rgb565抖动模式 ,但是没有找到对应寄存器,lvgl官网的图片转换程序里面勾选抖动和不勾选抖动,出来的c数组都完全一样,不知道是不是lvgl哪里的bug

离线

#6 2021-11-22 15:20:58

armstrong
会员
注册时间: 2019-04-10
已发帖子: 204
积分: 183.5

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

我估计是touchgfx的开发工具的功劳,它转换过程中用了dither算法,图片就会很自然。
而lvgl的转换工具没有这么牛逼。

离线

#7 2021-11-23 14:53:06

笔走天下
会员
注册时间: 2021-08-13
已发帖子: 60
积分: 9.5

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

2.png这是我的RGB565实物图,效果没有RGB666 18线好的

离线

#8 2021-11-23 21:42:01

sblpp
会员
注册时间: 2018-02-14
已发帖子: 140
积分: 104

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

在https://blog.csdn.net/louyangyang91/article/details/90905465 这看到一篇 RGB888转RGB565 抖动算法
试试这种抖动算法。
https://en.wikipedia.org/wiki/Ordered_dithering

============================================

/* Dither Tresshold for Red Channel */
static const BYTE dither_tresshold_r[64] = {
  1, 7, 3, 5, 0, 8, 2, 6,
  7, 1, 5, 3, 8, 0, 6, 2,
  3, 5, 0, 8, 2, 6, 1, 7,
  5, 3, 8, 0, 6, 2, 7, 1,

  0, 8, 2, 6, 1, 7, 3, 5,
  8, 0, 6, 2, 7, 1, 5, 3,
  2, 6, 1, 7, 3, 5, 0, 8,
  6, 2, 7, 1, 5, 3, 8, 0
};

/* Dither Tresshold for Green Channel */
static const BYTE dither_tresshold_g[64] = {
  1, 3, 2, 2, 3, 1, 2, 2,
  2, 2, 0, 4, 2, 2, 4, 0,
  3, 1, 2, 2, 1, 3, 2, 2,
  2, 2, 4, 0, 2, 2, 0, 4,

  1, 3, 2, 2, 3, 1, 2, 2,
  2, 2, 0, 4, 2, 2, 4, 0,
  3, 1, 2, 2, 1, 3, 2, 2,
  2, 2, 4, 0, 2, 2, 0, 4
};

/* Dither Tresshold for Blue Channel */
static const BYTE dither_tresshold_b[64] = {
  5, 3, 8, 0, 6, 2, 7, 1,
  3, 5, 0, 8, 2, 6, 1, 7,
  8, 0, 6, 2, 7, 1, 5, 3,
  0, 8, 2, 6, 1, 7, 3, 5,

  6, 2, 7, 1, 5, 3, 8, 0,
  2, 6, 1, 7, 3, 5, 0, 8,
  7, 1, 5, 3, 8, 0, 6, 2,
  1, 7, 3, 5, 0, 8, 2, 6
};

/* Get 16bit closest color */
BYTE closest_rb(BYTE c) { 
  return (c >> 3 << 3); /* red & blue */
}
BYTE closest_g(BYTE c) {
  return (c >> 2 << 2); /* green */
}

/* RGB565 */
WORD RGB16BIT(BYTE r, BYTE g, BYTE b) {
  return ((WORD)((r>>3)<<11)|((g>>2)<<5)|(b>>3));
}

/* Dithering by individual subpixel */
WORD dither_xy(
  int x, 
  int y, 
  BYTE r, 
  BYTE g, 
  BYTE b
){
  /* Get Tresshold Index */
  BYTE tresshold_id = ((y & 7) << 3) + (x & 7);

  r = closest_rb(
          MIN(r + dither_tresshold_r[tresshold_id], 0xff)
       );
  g = closest_g(
          MIN(g + dither_tresshold_g[tresshold_id], 0xff)
       );
  b = closest_rb(
          MIN(b + dither_tresshold_b[tresshold_id], 0xff)
       );
  return RGB16BIT(r, g, b);
}

/* Dithering Pixel from 32/24bit RGB 
*
* GetR, GetG, GetB -> Function to get individual color in pixel
*
*/
WORD dither_color_xy(int x, int y, DWORD col) {
  return dither_xy(x, y, GetR(col), GetG(col), GetB(col));
}

/* EXAMPLES */
void ExampleDither1(WORD * dest, DWORD * src, int width, int height){
  int x, y;
  for (y=0; y<height; y++){
    for (x=0; x<width; x++){
      int pos = y * width + x;
      dest[pos] = dither_color_xy(x,y,src[pos]);
    }
  }
}
void ExampleDither2(WORD * dest, BYTE * src, int width, int height){
  int x, y;
  for (y=0; y<height; y++){
    for (x=0; x<width; x++){
      int pos = y * width + x;
      dest[pos] = dither_xy(x,y,src[pos*3],src[pos*3+1],src[pos*3+2]);
    }
  }
}

楼主可试试看

离线

#9 2021-12-02 15:10:15

rim
会员
注册时间: 2021-12-02
已发帖子: 5
积分: 0

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

你们用操作系统的吗

离线

#10 2021-12-03 12:59:15

zhaolei26120
会员
注册时间: 2021-04-07
已发帖子: 3
积分: 3

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

PS对图片做处理呀,处理好后再给lvgl。TOUCHGXF应该是软件做抖动处理了。

离线

楼主 #11 2021-12-03 14:16:05

smiletiger
会员
注册时间: 2021-07-28
已发帖子: 32
积分: 2

Re: f1c100s+lvgl 渐变色显示效果那么差的吗,

zhaolei26120 说:

PS对图片做处理呀,处理好后再给lvgl。TOUCHGXF应该是软件做抖动处理了。

已经通过外部软件做抖动处理解决了,基本上和touchgfx差不多了

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn