结果展示
- 4级灰度阶梯
- 4灰阶做图展示,如果侵权,请帮忙告知,马上删除
原图:
灰度图:
B站视频指导
视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y1Z7xL
java驱动
回顾
- 本文承接之前的另一篇文章,如果还没看过
- 关于这个4阶灰度,官网中是有明确提到驱动方式的,
- 但是官方说明中的以下部分,说的应该是有问题的:
- 官网截图见下,这个介绍我感觉是错的,或者说如果有其他解释,请看得懂的同学也告知一下:
- 在实际的操作中,应该是如下这样,才能真正4阶展示:
java驱动
具体代码已经上传只github,github代码地址。
4级灰度阶梯
- 相当于把4.2寸的墨水屏分成4列,各列对应的0x10 0x13的数据依次为00、01、10、11.
- 关键方法代码见下,这里重点说一下,一定要专门设置四阶灰度对应的LUT波形——graySetLut()
/**
* 在屏幕上展示4个颜色阶梯(色阶)
* @throws IOException
* @throws InterruptedException
*/
public void display4GrayScale() throws IOException, InterruptedException {
System.out.println("display4GrayScale ===");
for4in2Demo.sendCommand(0x92);
for4in2Demo.sendCommand(0x10);
for (int i = 0; i < WIDTH * HEIGHT / 8; i++) {
int index = (i % 50) / 12; //每个颜色阶梯使用12 *8个像素展示
if (index > 3) index = 3; //只展示0~3这4个色阶,大于3就展示第三个色阶
if (index == 0 || index == 1) {
for4in2Demo.sendData(0x00);
} else if (index == 2 || index == 3) {
for4in2Demo.sendData(0xFF);
}
}
for4in2Demo.sendCommand(0x13);
for (int i = 0; i < WIDTH * HEIGHT / 8; i++) {
int index = (i % 50) / 12;
if (index > 3) {
index = 3;
}
if (index == 0 || index == 2) {
for4in2Demo.sendData(0x00);
} else if (index == 1 || index == 3) {
for4in2Demo.sendData(0xFF);
}
}
graySetLut(); //这里需要特别注意,必须要设置色戒对应的波形
for4in2Demo.sendCommand(0x12);
for4in2Demo.readBusy();
}
4灰阶做图
- 原理很简单,初始化一个type为BufferedImage.TYPE_BYTE_GRAY的BufferedImage(初始化一个灰阶的图片,这样初始化出来的图片,是0~255级灰阶的图片),参考方法:com.chenqi.waveshare.for4in2.GetEpaperImg#getGrayImg
- 然后将以上得到的256级(0到0xff)灰阶的图片,适配为4阶灰度,比如0到0xff/4为第一阶,0xff/4到0xff/4x2为第二阶,0xff/4x2到0xff/4x3为第三阶,0xff/4x3到0xff为第四阶。
- 关键4级灰阶做图方法参考这个方法:com.chenqi.waveshare.for4in2.Epaper4in2_4GrayScale#displayImgWith4GrayScale
后记
- 4级灰阶已经初步可以展示图片,但是还是非常粗糙,不够细腻。展示一个实际的相片见下,简直看不出来是啥。
- 下一篇,我们来搞搞16灰阶,使我们的墨水屏能真正展示些图片内容。