整张图片取模数字边缘光滑,数字单独取模送显后边缘有毛刺
应该是像素数的问题 不知是否跟RGB565有关,为节省CPU空间,我用的是单一色 彩屏的话可能跟图片有关,如果是JPG图片,一些边边角角会有过渡色,让边缘显得顺滑。如果用单色取模,过渡色没有了,就显出锯齿了。 我用的是PNG,这有过度色吗?或者有办法把过度色转变成单色的笔画吗? 本帖最后由 大明狐 于 2024-11-5 09:06 编辑智胜电子 发表于 2024-10-29 13:32
我用的是PNG,这有过度色吗?或者有办法把过度色转变成单色的笔画吗?
有过渡色。PNG只是最后保存图片的格式,会保留保存前的图片信息,过渡色会根据PNG格式的位数,变成对应的色阶。
在取模工具里,比如STC-ISP或者Img2Lcd,可以在单色模式下,通过拖动亮度对比度等参数的滑条,来决定把过渡色的色阶归为1还是0。
毕竟滑条操作精度有限,如果有更高要求,最好是在PS之类处理软件进行更细致的调整。
不过,只要是单色,就必然有锯齿。“抗锯齿”就是通过用过渡色填充单色锯齿的“缝隙”实现的(就像近视眼摘掉眼镜会看得更顺滑)。
弥补方法要么距离足够远或者增加匀光的遮挡物(不现实),要么使用灰色之类让图案的边缘对比不那么强烈的背景色,欺骗眼睛。
文字转成图片,图片用Image2Lcd转灰度图,然后把灰度数据当作alpha通道用,显示出来的字没锯齿,也能换颜色
/**
* @brief显示灰度文字图片,模拟AA效果
* @paramx 起始X坐标
* @paramy 起始Y坐标
* @paramw 图片宽度
* @paramh 图片高度
* @param*gray指向灰度图数组
* @paramfColor 前景色 RGB565
* @parambColor 背景色 RGB565
* @retval 无
*/
void LCD_Show4GrayPicture3(u16 x, u16 y, u16 w, u16 h, const u8 *gray, u16 fColor, u16 bColor)
{
u32 i, j;
u16 r1, g1, b1;
u16 r2, g2, b2;
u16 bytesPerLine;
u32 byteIndex;
u8 pixelData;
u8 shift;
u16 r, g, b;
u8 grayVal, alpha;
u16 color;
// 提取前景色分量
r1 = (fColor >> 11) & 0x1F;
g1 = (fColor >> 5)& 0x3F;
b1 =fColor & 0x1F;
// 提取背景色分量
r2 = (bColor >> 11) & 0x1F;
g2 = (bColor >> 5)& 0x3F;
b2 =bColor & 0x1F;
// 每行字节数
bytesPerLine = (w + 3) / 4;
LCD_Address_Set(x, y, x + w - 1, y + h - 1);
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j++)
{
byteIndex = i * bytesPerLine + (j / 4);
pixelData = gray;
shift = (3 - (j % 4)) * 2;
grayVal = (pixelData >> shift) & 0x03;
// 灰度映射 0~3 => 0, 85, 170, 255
alpha = grayVal * 85;
// 简单Alpha混合
r = (r1 * alpha + r2 * (255 - alpha)) / 255;
g = (g1 * alpha + g2 * (255 - alpha)) / 255;
b = (b1 * alpha + b2 * (255 - alpha)) / 255;
color = ((r & 0x1F) << 11) | ((g & 0x3F) << 5) | (b & 0x1F);
LCD_WR_DATA16(color);
}
}
}
页:
[1]