将单色像素值转换成灰阶屏的灰度序列的算法

就是想办法把单色OLED 屏幕的字库转换给灰阶屏用,并且代码中可以根据设置的灰度参数,用一种字体显示出多种深浅颜色。本来感觉会挺复杂的,想了想突然发现其实很简单。

灰阶屏原理

适用于ST7571 或SSD1328,以及类似的灰阶屏主控。以4 级 / 2bit 灰阶为例,发送显示数据时,一次要发送2 个字节,对应1 列8 个像素,每个像素点的灰度分别用前后两个字节中相同位置的2 个bit 来决定。如果用的屏幕是黑白液晶屏,发送的两个字节分别为0b0000'00010b0000'0001,最低位的两个1 组合成11,表示全黑;00 就表示全白,0110 分别是浅灰和深灰。如果是带灰阶的OLED,就反过来,黑色11 表示最亮,以此类推。16 级 / 4bit 灰阶原理是相同,只是要一次发送4 个字节才能控制8 个像素。

这类灰阶屏的像素对应关系和普通单色OLED 是一样的,如果不知道页(Page)、列(Column)、行(row)这些术语都代表什么,可以先去看单色OLED 屏的教程。

顺便一说,还有一种灰阶屏,比如2bit 灰阶的ST7586S,它是用一个字节里的2 个bit 表示一个像素,发送1 字节控制3 个像素,感觉有点恶心,反正我没用过。

灰度序列生成算法

还是以2bit 灰阶为例。单色屏幕用的字库都是1 字节表示8 个像素,1 表示全黑,0 表示全白;比如0b0101'0101,或者0x55,重复发送这个字节,就会在屏幕上显示4 组黑白相间的横线。如果要把0x55 显示成灰度0,只要给屏幕连续发送两字节0 就行了;要变成灰度3,那就连续发送两次0x55,对应的像素值就是11。如果要显示灰度1 和2,只要发送一次0x00,一次0x55,对应的像素值就是0110,那么该如何控制发送的先后顺序呢?[doge]

我刚开始还打算用查表法,然后马上反应过来,二进制0b010b10 本身就包含了这个顺序 。想先发0 后发0x55,只需要把0b01 放在一个变量里作为控制标记,然后:

  1. 0b01 按位取反变成0b10
  2. 0x01 & 0b10,计算得到0b10 的最低位是0;
  3. 发送0;
  4. 0b10 右移一位;
  5. 0x01,计算得到最低位是1;
  6. 发送0x55

就这么简单,换成0b10 的话,第2 步计算出最低位是1,发送的序列就变成0x55, 0x00。所以只需要给函数传入灰度值作为参数,然后用这个步骤就能转换出灰度序列。如果是16 级灰阶,那就把灰度值取反后循环右移4 次。

不过这个方法只能用于像素值有规律的这些屏幕,万一有某个辣鸡屏幕像素值是乱排的,比如0b00 是全白,0b01 是全黑,然后0b10 是浅灰,那这样的话就只能查表了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14046.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

GitLab 中文版如何禁止从 UI 上下载代码?

本文分享如何通过配置来禁止用户从 GitLab 中文版 UI 界面上下载源代码。 GitLab 中文版也就是极狐GitLab,使用界面和 GitLab 一样。常规下载代码的方式也一样,要么使用 SSH 或者 HTTP 克隆,要么直接从 UI 上下载源代码: 但是有些…

Conmi的正确答案——ESP32导出烧录进芯片的固件

版本:ESP-IDF 4.4.7 系统:Windows 11 相关链接: 官网:Read Flash Contents: read_flash GITHUB独立工具:esptool 命令: # 我这里用的是C3和windows版的EXE工具 esptool.exe --chip ESP32-C3 -p COM17 -b …

vue2+ element ui 集成pdfjs-dist

目录 1. 下载Pdf.js1.1 下载1.2 修改配置1.2.1 将pdfjs-3.8.162-dist复制到项目中1.2.2 解决跨域问题1.2.3 将pdf.worker.js文件复制到public目录下1.2.4 安装 pdfjs-dist1.2.5 前端vue代码(示例) 3. 参考资料 1. 下载Pdf.js 1.1 下载 下载链接(官方)需…

为什么越来越多的跨境卖家放弃电商平台,转向独立站?

对于做跨境电商的卖家来说,采用多平台、多站点的经营策略非常重要。这样做不仅可以分散风险,避免把所有的钱都押在一个市场上,减少“把所有鸡蛋放在一个篮子里”的风险,还能拓宽销售渠道,帮助卖家赚更多的钱&#xff0…

PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级

PCB生产ERP系统的智能拼版技术,是基于PCB前端报价系统获取到的用户或市场人员已录入系统的板子尺寸及set参数等,按照最优原则或利用率最大化原则自动进行计算并输出拼版样式图和板材利用率,提高工程人员效率,减少板材的浪费。覆铜…

2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)

会议地点 悉尼会场:澳大利亚悉尼-悉尼科技大学空中科技大学功能中心,沃特尔(Aerial UTS Function Centre, Wattle Room) 具体地址:Building 10, Level 7, 235 Jones Street, Ultimo, New South Wales, 2007, AU 郑州…

从零开始快速构建Vue3项目

一、技术选型 组件大类 具体插件 vue3插件 相关插件开发文档 基础架构搭建 初始项目搭建、打包构件工具:vite开始 | Vite路由管理及菜单权限封装vue-router介绍 | Vue Router状态管理Pinia介绍 | Pinia 中文文档API请求及异常封装axiosUI框架 element-uihttps…

spring cloud 入门笔记1(RestTemplate,Consul)

最大感受: spring cloud无非是将spring boot中的各个工作模块拆分成独立的小spring boot,各个模块之间,不再是通过导包什么的,调用而是通过网路进行各个模块之间的调用 工具一:RestTemplate 在Java代码中发送HTTP请…

从虚构到现实!FAME助力模型编辑走向实际应用

论文:FAME: Towards Factual Multi-Task Model Editing 链接:https://arxiv.org/abs/2410.10859项目:https://github.com/BITHLP/FAME 前言 大语言模型中丰富的知识使得其在如智能助理,法律顾问,医疗咨询等多个领域中…

无需Photoshop即可在线裁剪和调整图像大小的工具

Bitmind是一个灵活且易于使用的批量图像本地化处理器,经过抓包看,这个工具在浏览器本地运行,不会上传图片到服务器,所以安全性完全有保证。 它可以将图像调整到任何特定尺寸,并在必要时按比例裁剪。 这是一个在线工具…

计算两个结构的乘法

在行列可自由变换的平面上,2点结构有3个 3点结构有6个 计算2*2 2a1*2a14a6 2a1*2a24a8 2a1*2a34a12 显然2a1*2a14a6因为这3个结构都分布在同一列上,就是整数乘法。2a1*2a2的结果有2种写法,一种外形像2a1细节为2a2,一种外形为2…

短剧项目全流程花费项目详解:从软件采购到OSS流量

一、引言 随着网络视频的兴起,短剧项目作为一种新兴的内容形式,受到了广泛关注。然而,短剧项目运营过程中涉及诸多费用,本文将对短剧项目的各项花费进行明细分析,以帮助相关从业者更好地规划预算和控制成本。 二、软…

Vector Optimization – Vector Mask Register

文章目录 Vector优化 – Vector掩码寄存器 Vector优化 – Vector掩码寄存器 One of the reasons for low levels of vectorization is the presence of conditionals (IF statements) inside loops. IF statements introduce control dependencies into a loop. 矢量化水平低的…

冗余连接2 hard题 代随C#写法

此题在卡码网109与力扣685题亦有记载 有一说一C#写法我没咋搞懂 就看明白了思路 这里贴一个答案待后续我醒悟了再来看罢 难就难在对整体数据结构classUnion(并查集)的理解不熟并且 对于输入输出这个迭代过程理解上也比较吃力 109. 冗余连接II 题…

MySQL:CRUD

MySQL表的增删改查(操作的是表中的记录) CRUD(增删改查) C-Create新增R-Retrieve检查,查询U-Update更新D-Delete删除 新增(Create) 语法: 单行数据全列插入 insert into 表名[字段一,字段…

【stable diffusion部署】手把手教你从0基础入门Stable Diffusion

前言 在开始学之前,我想提前说一下,我所理解的AI绘画的本质,就是手替,人提出方案,AI帮你完成具体的作画过程。 写这篇文章的初衷,网上的Stable Diffusion教程太多了,但是我真正去学的时候发现…

前端单元测试框架 引入说明

1. 背景: 2. 如何选择: 2.1. 流行框架 Jest:由Facebook开源的JavaScript测试框架,应用于脸书系以及 ReactJs 系Mocha:适用于 NodeJs 和 浏览器、简易、灵活、有趣的JavaScript 测试框架Jasmine:BDD&#…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代,SEO(搜索引擎优化)已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面,提高在搜索引擎结果页面上的排名,从而获得更多的自然流量。有效的SEO策略能够让您在激…

MacBook不额外安装软件,怎样投屏到安卓手机上?

提起iPhone或MacBook的投屏,人们总会想到airplay功能。但离开了苹果生态,其他品牌的手机电脑就未必配备airplay功能了。 如果想要将MacBook的电脑屏幕共享到安卓手机或平板上,到底要怎样做?需要安装什么软件吗? 不需要…

自定义面板,高效的游戏性能分析利器

为了更有效地聚焦并解决性能问题,UWA报告采用了分模块监控策略,确保每个模块独立成章,各司其职。然而,随着对性能分析需求的不断升级,我们已经意识到,在深入分析某些跨模块的性能瓶颈或优化点时&#xff0c…