找回密码
 立即注册
查看: 364|回复: 5

各位高手,数字取模后边缘毛刺,有什么方法处理,

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2025-06-28 08:54:22

17

主题

29

回帖

291

积分

中级会员

积分
291
发表于 2025-1-6 09:57:19 | 显示全部楼层 |阅读模式
用RGB565方式取模是看不到毛刺,但取模后要在MCU上随意换底色时不好处理,因为数字给底色间有个过度色,大家有什么办法?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:566
  • 最近打卡:2025-06-28 12:40:52

21

主题

564

回帖

2920

积分

金牌会员

积分
2920
发表于 2025-1-6 11:01:21 | 显示全部楼层
太高端了,不懂
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-05-28 09:08:49

34

主题

1094

回帖

2468

积分

荣誉版主

积分
2468
发表于 2025-1-6 12:52:26 | 显示全部楼层
我知道一个方法,上位机如果是用C++编程,字体设置里有个选项 “抗锯齿” , 禁用这个选项,然后字体就没有过渡色了,把字符画在窗口或内存位图上,再取模。 虽然这个方法取模出来的字体会有锯齿,但是比我们用软件阈值取的来的效果要好。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2025-06-28 08:54:22

17

主题

29

回帖

291

积分

中级会员

积分
291
发表于 2025-1-6 13:43:34 | 显示全部楼层
tzz1*** 发表于 2025-1-6 12:52
我知道一个方法,上位机如果是用C++编程,字体设置里有个选项 “抗锯齿” , 禁用这个选项,然后字体就没有 ...

没玩过上位机,取模的图片要想在MCU中随意换底色,最好是选单色取模,可单色取模有毛刺,用RGB565取模是没毛刺,但不知在MCU中怎样换底色,你有什么方法
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2025-06-28 08:54:22

17

主题

29

回帖

291

积分

中级会员

积分
291
发表于 2025-1-7 09:58:52 | 显示全部楼层
wnag*** 发表于 2025-1-6 20:55
底色统一使用0X0000表示,如果有纯黑,就用0X0001代替,这样代码中遇到0就用底色,否则就显示字 ...

比如,白字黑底用RGB565取模,我要换成白字红底,原来白字黑底取模时白字的边缘有个白和黑的过度色,现在换成白字红底时怎么把白和黑的过度色变成白和红的过度色
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-06-28 14:16:41

1

主题

22

回帖

103

积分

注册会员

积分
103
发表于 9 小时前 | 显示全部楼层
智胜*** 发表于 2025-1-7 09:58
比如,白字黑底用RGB565取模,我要换成白字红底,原来白字黑底取模时白字的边缘有个白和黑的过度色,现在 ...

文字转成图片,图片用Image2Lcd转灰度图,然后把灰度数据当作alpha通道用,显示出来的字没锯齿,也能换颜色
  1. /**
  2. * @brief  显示灰度文字图片,模拟AA效果
  3. * @param  x      起始X坐标
  4. * @param  y      起始Y坐标
  5. * @param  w      图片宽度
  6. * @param  h      图片高度
  7. * @param  *gray  指向灰度图数组
  8. * @param  fColor 前景色 RGB565
  9. * @param  bColor 背景色 RGB565
  10. * @retval 无
  11. */
  12. void LCD_Show4GrayPicture3(u16 x, u16 y, u16 w, u16 h, const u8 *gray, u16 fColor, u16 bColor)
  13. {
  14.     u32 i, j;
  15.     u16 r1, g1, b1;
  16.     u16 r2, g2, b2;
  17.         u16 bytesPerLine;
  18.         u32 byteIndex;
  19.         u8 pixelData;
  20.         u8 shift;
  21.     u16 r, g, b;
  22.     u8 grayVal, alpha;
  23.     u16 color;
  24.     // 提取前景色分量
  25.     r1 = (fColor >> 11) & 0x1F;
  26.     g1 = (fColor >> 5)  & 0x3F;
  27.     b1 =  fColor        & 0x1F;
  28.     // 提取背景色分量
  29.     r2 = (bColor >> 11) & 0x1F;
  30.     g2 = (bColor >> 5)  & 0x3F;
  31.     b2 =  bColor        & 0x1F;
  32.     // 每行字节数
  33.     bytesPerLine = (w + 3) / 4;
  34.     LCD_Address_Set(x, y, x + w - 1, y + h - 1);
  35.     for (i = 0; i < h; i++)
  36.     {
  37.         for (j = 0; j < w; j++)
  38.         {
  39.             byteIndex = i * bytesPerLine + (j / 4);
  40.             pixelData = gray[byteIndex];
  41.             shift = (3 - (j % 4)) * 2;
  42.             grayVal = (pixelData >> shift) & 0x03;
  43.             // 灰度映射 0~3 => 0, 85, 170, 255
  44.             alpha = grayVal * 85;
  45.             // 简单Alpha混合
  46.             r = (r1 * alpha + r2 * (255 - alpha)) / 255;
  47.             g = (g1 * alpha + g2 * (255 - alpha)) / 255;
  48.             b = (b1 * alpha + b2 * (255 - alpha)) / 255;
  49.             color = ((r & 0x1F) << 11) | ((g & 0x3F) << 5) | (b & 0x1F);
  50.             LCD_WR_DATA16(color);
  51.         }
  52.     }
  53. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-28 23:58 , Processed in 0.261619 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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