结果展示

  1. 4级灰度阶梯
  2. 4灰阶做图展示,如果侵权,请帮忙告知,马上删除
    原图:

    灰度图:

B站视频指导

视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y1Z7xL

java驱动

回顾

  1. 本文承接之前的另一篇文章,如果还没看过
  2. 关于这个4阶灰度,官网中是有明确提到驱动方式的,
  3. 但是官方说明中的以下部分,说的应该是有问题的:
  1. 官网截图见下,这个介绍我感觉是错的,或者说如果有其他解释,请看得懂的同学也告知一下:
  2. 在实际的操作中,应该是如下这样,才能真正4阶展示:

java驱动

具体代码已经上传只github,github代码地址

4级灰度阶梯

  1. 相当于把4.2寸的墨水屏分成4列,各列对应的0x10 0x13的数据依次为00、01、10、11.
  2. 关键方法代码见下,这里重点说一下,一定要专门设置四阶灰度对应的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灰阶做图

  1. 原理很简单,初始化一个type为BufferedImage.TYPE_BYTE_GRAY的BufferedImage(初始化一个灰阶的图片,这样初始化出来的图片,是0~255级灰阶的图片),参考方法:com.chenqi.waveshare.for4in2.GetEpaperImg#getGrayImg
  2. 然后将以上得到的256级(0到0xff)灰阶的图片,适配为4阶灰度,比如0到0xff/4为第一阶,0xff/4到0xff/4x2为第二阶,0xff/4x2到0xff/4x3为第三阶,0xff/4x3到0xff为第四阶。
  3. 关键4级灰阶做图方法参考这个方法:com.chenqi.waveshare.for4in2.Epaper4in2_4GrayScale#displayImgWith4GrayScale

后记

  1. 4级灰阶已经初步可以展示图片,但是还是非常粗糙,不够细腻。展示一个实际的相片见下,简直看不出来是啥。
  2. 下一篇,我们来搞搞16灰阶,使我们的墨水屏能真正展示些图片内容。