找回密码
 立即注册
查看: 31|回复: 4

STC取模工具的“前”规则

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:553
  • 最近打卡:2025-10-14 03:14:23

32

主题

417

回帖

3699

积分

荣誉版主

积分
3699
发表于 昨天 15:23 | 显示全部楼层 |阅读模式
对于STC取模工具,网上问的比较多的是图片取模工具的乱码问题,基本都是存储顺序选错的原因。
关于图片取模工具存储顺序的“低位在前”或者“高位在前”,之前也是习惯了一段时间。

因为发现文字和图片的两个取模工具里,存储顺序是反的。

用了一张八个像素点的图片试了一下,最上面的点是亮点,下面七个点是黑点
截图202510131304218814.jpg

然后分别用文字和图片的两个取模工具对其进行取模,扫描顺序是从上向下。

在文字取模工具里,选择存储顺序为【低位在前】,生成的数据是 0x01,也就是 从低位到高位 存储的, “前”是指 数据的最低位。
截图202510131317495420.jpg

而用图片取模工具,扫描顺序也是从上向下,存储顺序也是【低位在前】,生成的数据却是 0x80 ,也就是这个 “前”是指 数据的最高位。
截图202510131318242170.jpg


两个工具里的 “” 的规则是相反的。
====================================================================================


“前”是最高位还是最低位,对于常用的单色屏和彩屏,其实是个矛盾。

对于单色的OLED来说,“前”是数据的最低位,是正确的,屏幕接收数据的顺序是从低位到高位,
所以文字取模工具的“高位在前”的存储顺序选项是对的。


而对于彩屏来说,
都是按照阅读的习惯,是按指定的顺序,读取图片的每一个像素点,所以把先读到的点作为数据的最高位,。
而像U8g2之类单色屏幕驱动库,也沿用了这个顺序,于是读取八个点的亮灭状态的时候,也把先扫描到的点的值,放在了最高位。
所以对于单色OLED的八个点一个字节的数据,是从高位向低位存储,也就成了“低位在前”了,也是对的。
截图202510131419413547.jpg

这就导致了在了对于单色OLED屏幕来说,两个取模工具里的规则正好相反了。

所以,两个工具里的存储顺序的规则,都是对的,只是不能作为同一个工具来进行对比。

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


这也是为什么,在PCtoLCD里,正常存储的顺序反而会标着“逆向”,反着的标的是“顺向”。
软件作者应该也是沿用的彩屏的从先读到的点放在高位的思维,对于数据的前低后高的顺序,
跟OLED屏幕的八个点对应数据的高低位是上低下高的结构,跟正好是逆向的方向。
截图202510131441255301.jpg






能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

3

主题

1888

回帖

624

积分

等待验证会员

积分
624
发表于 昨天 15:28 | 显示全部楼层
关于STC取模工具中“前”规则的理解与辨析

在使用STC系列取模工具进行图像与文字处理时,"前"这一术语在不同工具中的含义存在显著差异,这一现象在实际应用中容易引发混淆,特别是在图像与文字取模工具之间切换时,极易导致数据错误或显示异常。本文旨在深入解析这一问题的本质,并提供清晰的逻辑框架以帮助开发者准确理解与应用相关规则。

一、“前”规则的定义及其在取模中的作用

在嵌入式图形处理中,取模(或称为点阵提取)是将图像或文字转换为二进制数据的过程。这些数据通常以字节为单位进行存储和传输,每个字节代表若干像素点的状态(如亮/灭)。由于一个字节由8位组成(bit0~bit7),像素点的排列方式会直接影响最终显示效果。

“前”通常用于描述数据存储或传输时的顺序。具体而言,"低位在前"(LSB First)表示最低有效位(Least Significant Bit)先被处理,而"高位在前"(MSB First)则意味着最高有效位(Most Significant Bit)优先。

二、文字取模工具中的“前”规则

在STC文字取模工具中,“前”指的是数据的最低位(LSB)。例如,若图像中某列像素从上到下依次为:亮(1)、灭(0)、灭(0)、灭(0)、灭(0)、灭(0)、灭(0)、灭(0),则该列对应的二进制值为0b00000001,对应的十六进制为0x01。此时,选择“低位在前”即表示最低位(bit0)对应图像顶部的像素点。

这种处理方式与常见的单色OLED显示屏(如SSD1306控制器)的像素数据接收顺序一致。这类屏幕在接收数据时,默认将字节的最低位作为第一个像素点,因此文字取模工具采用“低位在前”的方式是符合硬件逻辑的。

三、图片取模工具中的“前”规则

在图片取模工具中,“前”的含义与文字取模工具相反。例如,同样的像素排列:顶部为亮、其余为灭,使用图片取模工具并选择“低位在前”时,生成的数据为0x80(即二进制0b10000000)。这表明,此时“前”指的是最高位(MSB),即最高位对应图像顶部的像素点。

这种设计可能源于对图像数据处理的通用规范。在图像格式(如BMP)中,像素点的排列通常是以高位在前的方式进行组织的。因此,图片取模工具可能为了兼容图像处理标准,采用了与文字取模工具相反的“前”定义。

四、规则差异的根源与影响

1. 硬件与软件标准的差异  
   单色屏(如OLED)驱动芯片通常采用LSB First的方式处理像素数据,而图像文件格式(如BMP、PNG)则倾向于MSB First的排列方式。这种差异导致了取模工具在处理不同类型数据时采用了不同的默认规则。

2. 工具设计的出发点不同  
   文字取模工具主要面向字符显示,强调与屏幕控制器的直接兼容性;而图片取模工具更侧重于图像数据的标准化处理,倾向于遵循图像文件格式的通用规范。因此,二者在“前”的定义上存在差异是设计目标不同所致。

3. 对开发者的潜在影响  
   若开发者未注意到这一差异,可能会导致图像或文字显示异常。例如,在使用图片取模工具生成的数据时,若误认为“低位在前”与文字取模工具一致,将导致像素点上下颠倒或数据位错位,进而影响显示效果。

五、解决方法与建议

1. 明确工具用途  
   在使用取模工具之前,应明确其用途是用于文字显示还是图像显示。文字取模工具适用于字符型数据,而图片取模工具适用于图像资源。

2. 核对扫描顺序与存储顺序  
   扫描顺序(如从上到下、从左到右)与存储顺序(低位在前/高位在前)应统一设置。例如,在文字取模工具中,若扫描顺序为从上到下,则选择“低位在前”;而在图片取模工具中,同样扫描顺序下应选择“高位在前”。

3. 通过测试验证规则  
   建议使用简单的测试图像(如单像素亮、其余为灭)进行验证。通过观察生成的数据是否符合预期,可快速判断当前设置是否正确。

4. 自定义取模逻辑  
   对于有较高开发需求的项目,建议自行编写取模程序,以确保像素点与数据位的一一对应关系符合预期,避免因工具规则差异带来的不确定性。

六、结语

STC取模工具中“前”规则的差异,本质上是不同应用场景下对数据组织方式的不同选择。理解这一差异不仅有助于正确使用工具,也有助于开发者更深入地掌握嵌入式图形系统的底层原理。在实际开发中,建议结合硬件特性与数据格式要求,合理选择取模方式,以确保图像与文字显示的准确性和一致性。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:206
  • 最近打卡:2025-10-13 01:10:06

787

主题

1万

回帖

1万

积分

管理员

积分
19710
发表于 昨天 16:10 | 显示全部楼层
截图202510131610406415.jpg

点评

上面说的文字工具和图片工具的“前”规则的区别,是单色模式下,八个点的值,在一个字节的数据里的存储顺序。跟彩色模式下每个像素点的RGB颜色顺序是两件事儿。  详情 回复 发表于 昨天 16:32
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:553
  • 最近打卡:2025-10-14 03:14:23

32

主题

417

回帖

3699

积分

荣誉版主

积分
3699
发表于 昨天 16:32 | 显示全部楼层

上面说的文字工具和图片工具的“前”规则的区别,是单色模式下,八个点的值,在一个字节的数据里的存储顺序。
跟彩色模式下每个像素点的RGB颜色顺序是两件事儿。

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:206
  • 最近打卡:2025-10-13 01:10:06

787

主题

1万

回帖

1万

积分

管理员

积分
19710
发表于 昨天 20:26 | 显示全部楼层
搭车宣传下好东西
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-14 08:04 , Processed in 0.150629 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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