public void DrawNativeBuffer(byte[] buffer, EinkColor color) { if (buffer.Length != displayWidth * displayHeight >> 3) { throw new ArgumentOutOfRangeException(); } sendCommand(new byte[] { color == EinkColor.Black ? (byte)0x10 : (byte)0x13 }); for (int i = 0; i < buffer.Length; i++) { sendData(new byte[] { (byte)~buffer[i] }); } }
private void writeImage(byte[] buffer, EinkColor color) { int x, y, yBase, red, green, blue, firstByte, secondByte, bitMask; byte dataByte; for (int byteIndex = 0; byteIndex < displayWidth * displayHeight >> 3; byteIndex++) { dataByte = 0; x = displayWidth - 1 - byteIndex / 13; yBase = (byteIndex % 13) << 3; bitMask = 1; for (int bitIndex = 0; bitIndex < 8; bitIndex++) { y = yBase + 7 - bitIndex; firstByte = buffer[x * 2 + y * displayWidth * 2]; secondByte = buffer[x * 2 + y * displayWidth * 2 + 1]; red = secondByte >> 3; green = firstByte >> 5 + (secondByte & 0b00000111) << 3; blue = firstByte & 0b00011111; if (color == EinkColor.Red && red > 15 && green < 32 && blue < 16) { dataByte += (byte)bitMask; } if (color == EinkColor.Black && red < 16 && green < 32 && blue < 16) { dataByte += (byte)bitMask; } bitMask <<= 1; } sendData(new byte[] { (byte)~dataByte }); } }