首页 > 解决方案 > 将PNG文件转换为不带标题的位图

问题描述

我需要为 Arduino 设备(带电子墨水显示屏)准备一个位图源流。数据来自 PNG 文件。我需要一个没有标题的“原始”图像数据。图像的每个像素只有 1 和 0(屏幕上的黑色或白色像素)。不幸的是,我不知道如何删除标题并将 PNG 文件转换为位图。这是我现在使用的代码(NodeJS):

const http = require('http');
const fs = require('fs');

const server = http.createServer(function(req, res) {
  res.setHeader('content-type', 'application/octet-stream');

  fs.readFile('sample.png', function(err, data) {
    res.end(data);
  });
});

server.listen(3000);

当我使用 BMP 文件作为源时,它几乎可以正常工作,但我需要使用 PNG 文件。

这是我在 Arduino 上读取流的方式:

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
ESP8266WiFiMulti WiFiMulti;

#include <GxEPD.h>
#define ROTATION 1
#include <GxGDEW0583T7/GxGDEW0583T7.cpp>
#include <GxIO/GxIO_SPI/GxIO_SPI.cpp>
#include <GxIO/GxIO.cpp>

GxIO_Class io(SPI, 5, 0, 2);
GxEPD_Class display(io, 2, 12);

#define X_RES 448
#define Y_RES 600

void displayImage() {
      uint32_t cursor = 0;
      uint8_t eightPixels;
      boolean initialized = false;
      int len = http.getSize();
      uint8_t buff[256] = { 0 };

      WiFiClient * stream = http.getStreamPtr();

      while(http.connected() && (len > 0 || len == -1)) {
        size_t size = stream->available();

        if(size) {
          int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));

          for (int offset = 0; offset < c; offset++) {
            if (!initialized) {
              initialized = true;
              display.init();
              display.setRotation(1);
            }

            eightPixels = buff[offset];

            if (cursor < X_RES*Y_RES) {
              for (uint8_t i = 0; i < 8; i++) {
                if ((eightPixels >> (7-i)) & 0x01){
                  display.drawPixel((cursor+i)%X_RES, (cursor+i)/X_RES, GxEPD_BLACK);
                }
              }
              cursor+=8;
            }
          }

          if(len > 0) {
            len -= c;
          }
        }
        delay(1);
      }
      display.update();
    }
}

如果您能以某种方式帮助我,我将不胜感激。

标签: javascriptnode.jsarduino

解决方案


推荐阅读