介绍

LCD/OLED相信有过嵌入式开发经历的同学都有使用过,但是绝大多数人都是使用一些广为流传的驱动函数,在上面写写英文,写写汉字,画一些矩阵和圆这种简单的图案。作为一个超爱花里胡哨的选手,我当然不允许我的显示屏幕上只有这些东西,所以我总结出了一整套在LCD/OLED上绘制图案的方法,包括图片,图标和GIF。欢迎大家与我交流:2250017028@qq.com

图标绘制

使用软件:IconWorkshop + Img2Lcd

  1. IconWorkshop
  • 首先打开软件,选择UNIX图标,再选择想要生成的图片大小(只考虑单色图,因为要在OLED显示)

  • 快乐绘图,使用右边工具栏中的画笔进行创作

    效果图:
  • 保存图片到自定义路径
  1. Img2Lcd
  • 使用软件打开上面保存的图片并如图修改配置参数(这个与绘制函数息息相关)
  • 生成对应数组,并将其放到工程文件中(推荐使用一个头文件存储想要在显示器上打印的图片数组,或者将其存储入外部FLASH中)
  • 编写图片绘制函数
/***@brief 在LCD指定位置绘制图片*@param x0 y0 x1 y1 图片起止点*@param front_color 图像颜色*@param back_color 背景颜色*@param  p 图片存储地址*/
void LCD_Draw_Picture(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, int front_color, int back_color, const unsigned char* p)
{char temp, t;unsigned int j=0;unsigned char x,y;if((y1-y0)%8!=0) y1 =(y1-y0)/8 + 1; else y1 = y1 / 8;for(y=0;y<y1;y++){for(x=x0;x<x1;x++){      temp = p[j++]; for(t=0;t<8;t++){if(temp&0x01){POINT_COLOR = front_color;LCD_DrawPoint(x,y*8+y0+t);}else {POINT_COLOR = back_color;LCD_DrawPoint(x,y*8+y0+t);}temp>>=1;                  }}}
}/***@brief 在OLED指定位置绘制图片*@param x0 y0 x1 y1 图片起止点*@param mode 0 反白显示 1 正常显示 *@param    p 图片存储地址*@note x:0~128 y:0~64*/
void OLED_Draw_Picture(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t mode, unsigned const char p[])
{char temp, t;unsigned int j=0;unsigned char x,y;if((y1-y0)%8!=0) y1 =(y1-y0)/8 + 1; else y1 = y1 / 8;for(y=0;y<y1;y++){for(x=x0;x<x1;x++){      temp = p[j++]; for(t=0;t<8;t++){if(temp&0x01)OLED_DrawPoint(x,y*8+y0+t,mode);else OLED_DrawPoint(x,y*8+y0+t,!mode);temp>>=1;                  }}}
}

呈现效果,以OLED为例

图片绘制

使用软件:画图+Img2Lcd

  1. 下载图片
    下载的格式最好为.png或者.jpg格式。
  2. 图片处理
    这里的处理指的是图片大小的处理,可以使用画图软件进行图片大小修改。下面以俄罗斯方块的一张图标为例。先打开该图片,在右上方有重新调整大小按键,可以根据自己的需求调整图片大小


    调整后对图片进行存储,一般bmp格式就够用了。

    接下来就是对图片进行取模,也是使用Img2Lcd软件,但是不同于上面图标取模的是,因为该图片是彩色的,转换为二值图需要选择合适的阈值,不然最后得到的图片会失去相当多的信息。
    适当亮度+对比度

    过亮+对比度过小

    接下来的处理就跟上面图标处理一致了,这里不再赘述。

GIF绘制

使用软件:GifResizerChs + zhs9 + Img2Lcd
其实GIF取模跟图片取模最大的一点区别就是,GIF取模是多图片处理,而上述图片取模只针对于一张图片。

1.找到合适的GIF图

这里以我找的《上篮》为例

2.修改GIF的尺寸

这里使用GifResizerChs进行处理,目的是为了处理后的GIF图尺寸适配所使用的显示屏。

3.将GIF分割成多图

这里使用的是zhs9,最后生成的图片如果数量过多可以适当的进行删减,不会影响最后的显示效果。

4.图片二值化处理

若图片本身为彩色图,可以使用PictureReader软件对图片进行预处理为二值图片。这一步也可以忽略,因为最后取模为图像数组也会有二值化的过程。

5.图片取模

这里使用的方法有点笨,因为没有找到批量取模的软件,所以使用的还是Img2Lcd对GIF分离出来的图片进行逐一取模。这里使用上一幅下一幅可以切换一个文件夹内的各个图片文件,然后逐一生成C文件代码进行存储

6. GIF显示

参考上面给出的显示一张图片的方法,对于多张图片的显示,就是一张一张图片进行显示,并且每张图片显示的间隔中需要加一定的延时,延时大小会影响最后的流畅度。这里给出我之前做的项目的开机动画作为参考。

如果对于在OLED/LCD上显示图片还有疑问,欢迎与我进一步交流:2250017028@qq.com

分享一些在LCD/OLED上绘制图像的软件使用技巧相关推荐

  1. 用python画背景_如何在有背景的画布上绘制图像

    我想用Tkinger做一个纸牌游戏.在设置一个表图像作为画布的背景.在 在桌子的背景上画卡片.这将通过单击按钮(此处未显示)来触发 问题是我不能在桌面背景上创建卡片图像.正确的方法是什么?我是否需要为 ...

  2. Mac上绘制流程图的软件

    WPS WPS不仅仅只有WPS还集成了很多其它工具,比如思维导图.流程图等. www.processon.com 在线制作 WPS和ProcessOn功能几乎完全一样,好像ProcessOn比WPS功 ...

  3. php绘制图像黑色的数值,canvas.toDataURL()通过尝试调整base64的大小而导致黑色图像字符串...

    我目前正在尝试调整base64图像的大小,因为图像文件太大而无法在稍后使用php进行处理.我找到了一种通过使用画布调整图像大小来实现这一点的方法.不幸的是,我得到的图像只是一个宽度为300px,高度为 ...

  4. 如何使用Graphics绘制图像

    希望在控件上绘制图像,可以使用一下方法. // 用来显示的画板                 Bitmap drawImg  =   new  Bitmap(width, height);      ...

  5. 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享

    1. 引言 PDF是一种和操作系统及平台无关的.可移植的电子文件格式,其以PostScript语言图像模型为基础,无论在哪种打印机上,都可保证精确的颜色和准确的打印效果.PDF将真实地再现原稿的每一个 ...

  6. cvDrawContours:在图像上绘制外部和内部轮廓

    转自:http://www.aiseminar.cn/html/18/t-618.html?action-uchimage 函数cvDrawContours用于在图像上绘制外部和内部轮廓.当thick ...

  7. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

  8. 【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面

    弧度一块可能有误,需要再研究 导航 [初探HTML5之使用新标签布局]用html5布局我的博客页! [HTML5初探之form标签]解放表单验证.增加文件上传.集成拖放 [HTML5初探之绘制图像(上 ...

  9. 添加飞船图像:创建ship类与在屏幕上绘制飞船

    系列文章目录 一.Pygame的安装与项目规划 二.开始游戏项目:创建pygame窗口及响应用户输入 三.开始游戏项目:设置背景色和创建设置类 目录 系列文章目录 前言 添加飞船图像 创建ship类 ...

最新文章

  1. 比赛杀器LightGBM常用操作总结!
  2. 评阅百篇博士论文后我发现:博士生发SCI越多,通常科研能力越差!
  3. 推荐9款优秀的 HTML5 音乐播放器
  4. netsh winsock reset什么意思_商丘耐火砖什么意思,刹车片_马达加斯加嘎瓦石墨公司...
  5. 直流无刷电机制动的三种方式
  6. 【Android 修炼手册】Gradle 篇 -- Gradle 的基本使用
  7. shell获取执行脚本路径
  8. 分析一天1000万北京地铁客流,我们发现...
  9. 桥接模式(Bridge) 1
  10. SpringBoot 接收 单个String入参之解决方案
  11. IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置...
  12. Windows桌面文件夹删除被提示“找不到该项目”——顽固目录、文件的删除
  13. 计算机上数字代表那个音符,音符时值
  14. OCR文字识别算法总结
  15. 1-C语言 8皇后问题 (For循环解法)
  16. 推荐系统经典算法之协同过滤
  17. mybatis动态SQL多条件查询1 - if 标签
  18. warmup_csaw_2016
  19. 用Qt从零开始学C++:函数和数据类型
  20. EPUB弹出窗口式脚注

热门文章

  1. 如何在Word文档中插入一条分隔线?
  2. 2021年B证(安全员)考试技巧及B证(安全员)复审考试
  3. 【调剂】贵州财经大学大数据统计学院关于2022年硕士研究生预调剂的通知
  4. Java 实现HMAC算法
  5. 最新kali之smbclient
  6. 手撕“汉诺塔算法”之详细图解
  7. JavaScript系列—简述JS中的事件委托和事件代理
  8. python去除图片复杂背景_[OpenCV-Python] OpenCV 中的图像处理 部分 IV (五)
  9. Browser Object Model浏览器对象模型
  10. 基于SSM框架权限系统的开发