From 39dad32c8a13309a18ca33c916097220cef528d3 Mon Sep 17 00:00:00 2001 From: Michal Vrchota Date: Fri, 8 Jul 2016 23:31:52 +0200 Subject: [PATCH] Ardafruit GFX bitmap functions with example --- TFT_22_ILI9225.cpp | 87 +++++++++++ TFT_22_ILI9225.h | 6 + examples/Basic_Demo/Basic_Demo.ino | 237 +++++++++++++++++++++++++++++ images/tux.png | Bin 0 -> 13345 bytes 4 files changed, 330 insertions(+) create mode 100644 images/tux.png diff --git a/TFT_22_ILI9225.cpp b/TFT_22_ILI9225.cpp index 817f689..0c2d2e3 100644 --- a/TFT_22_ILI9225.cpp +++ b/TFT_22_ILI9225.cpp @@ -554,3 +554,90 @@ uint16_t TFT_22_ILI9225::drawChar(uint16_t x, uint16_t y, uint16_t ch, uint16_t return charWidth; } +// Draw a 1-bit image (bitmap) at the specified (x,y) position from the +// provided bitmap buffer (must be PROGMEM memory) using the specified +// foreground color (unset bits are transparent). +void TFT_22_ILI9225::drawBitmap(int16_t x, int16_t y, +const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) { + + int16_t i, j, byteWidth = (w + 7) / 8; + uint8_t byte; + + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + if (i & 7) byte <<= 1; + else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8); + if (byte & 0x80) drawPixel(x + i, y + j, color); + } + } +} + +// Draw a 1-bit image (bitmap) at the specified (x,y) position from the +// provided bitmap buffer (must be PROGMEM memory) using the specified +// foreground (for set bits) and background (for clear bits) colors. +void TFT_22_ILI9225::drawBitmap(int16_t x, int16_t y, +const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) { + + int16_t i, j, byteWidth = (w + 7) / 8; + uint8_t byte; + + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++ ) { + if (i & 7) byte <<= 1; + else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8); + if (byte & 0x80) drawPixel(x + i, y + j, color); + else drawPixel(x + i, y + j, bg); + } + } +} + +// drawBitmap() variant for RAM-resident (not PROGMEM) bitmaps. +void TFT_22_ILI9225::drawBitmap(int16_t x, int16_t y, +uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) { + + int16_t i, j, byteWidth = (w + 7) / 8; + uint8_t byte; + + for(j = 0; j < h; j++) { + for(i = 0; i < w; i++) { + if (i & 7) byte <<= 1; + else byte = bitmap[j * byteWidth + i / 8]; + if (byte & 0x80) drawPixel(x + i, y + j, color); + } + } +} + +// drawBitmap() variant w/background for RAM-resident (not PROGMEM) bitmaps. +void TFT_22_ILI9225::drawBitmap(int16_t x, int16_t y, +uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) { + + int16_t i, j, byteWidth = (w + 7) / 8; + uint8_t byte; + + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++ ) { + if (i & 7) byte <<= 1; + else byte = bitmap[j * byteWidth + i / 8]; + if (byte & 0x80) drawPixel(x + i, y + j, color); + else drawPixel(x + i, y + j, bg); + } + } +} + +//Draw XBitMap Files (*.xbm), exported from GIMP, +//Usage: Export from GIMP to *.xbm, rename *.xbm to *.c and open in editor. +//C Array can be directly used with this function +void TFT_22_ILI9225::drawXBitmap(int16_t x, int16_t y, +const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) { + + int16_t i, j, byteWidth = (w + 7) / 8; + uint8_t byte; + + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++ ) { + if (i & 7) byte >>= 1; + else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8); + if (byte & 0x01) drawPixel(x + i, y + j, color); + } + } +} diff --git a/TFT_22_ILI9225.h b/TFT_22_ILI9225.h index 3ba7f37..e45b6dc 100644 --- a/TFT_22_ILI9225.h +++ b/TFT_22_ILI9225.h @@ -270,6 +270,12 @@ class TFT_22_ILI9225 { /// @param color 16-bit color, default=white uint16_t drawChar(uint16_t x, uint16_t y, uint16_t ch, uint16_t color = COLOR_WHITE); + void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); + void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg); + void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); + void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg); + void drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); + private: void _swap(uint16_t &a, uint16_t &b), diff --git a/examples/Basic_Demo/Basic_Demo.ino b/examples/Basic_Demo/Basic_Demo.ino index 6131157..5383847 100644 --- a/examples/Basic_Demo/Basic_Demo.ino +++ b/examples/Basic_Demo/Basic_Demo.ino @@ -18,6 +18,234 @@ TFT_22_ILI9225 tft = TFT_22_ILI9225(TFT_RST, TFT_RS, TFT_CS, TFT_LED); uint16_t x, y; boolean flag = false; +/* + * Tux black/white image in 180x220 converted using Ardafruit bitmap converter + * https://github.com/ehubin/Adafruit-GFX-Library/tree/master/Img2Code + */ +static const uint8_t PROGMEM tux[] = +{ +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x0,0x0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x0,0x0,0x0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x0,0x0,0x0,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x1,0xfc,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x0,0x0,0x7,0xfe,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1,0xf8,0x0,0xf,0xff,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x3,0xfc,0x0,0x1f,0xff,0x80,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7,0xfe,0x0,0x1f,0xff,0xc0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7,0xfe,0x0,0x3f,0xff,0xc0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf,0xff,0x0,0x3f,0xff,0xe0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf,0xff,0x0,0x7f,0xf,0xe0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf,0xbf,0x80,0x7e,0x7,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf,0xf,0x80,0x7c,0x7,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x7,0x80,0x78,0x3,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x7,0x80,0x78,0x3,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x7,0x80,0x78,0x3,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x3,0x80,0x78,0x3,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x3,0x0,0x38,0x3,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x0,0x0,0x0,0x3,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x0,0xff,0xc0,0x3,0xe0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x6,0x1,0xff,0xf8,0x3,0xe0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7,0x7,0xff,0xfc,0x7,0xe0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3,0x8f,0xff,0xff,0x7,0xc0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3,0x1f,0xff,0xff,0xc0,0x80,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x3f,0xff,0xff,0xf8,0x0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0xff,0x0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0xff,0xff,0xff,0xff,0xc0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3,0xff,0xff,0xff,0xff,0xe0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0xff,0xff,0xff,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf,0xff,0xff,0xff,0xfe,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x19,0xff,0xff,0xff,0xf8,0x70,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x18,0xff,0xff,0xff,0xe0,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1c,0x7f,0xff,0xff,0x87,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe,0x3f,0xff,0xff,0xf,0xe0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7,0x1f,0xff,0xfc,0x3f,0xc0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7,0x87,0xff,0xf0,0xff,0x80,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x3,0xe1,0xff,0xc3,0xff,0x10,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0xf0,0x38,0xf,0xfe,0x38,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x7e,0x0,0x3f,0xf8,0x78,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x2,0x1f,0xe7,0xff,0xc1,0xf8,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x3,0x8f,0xff,0xff,0x7,0xfc,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x3,0xc7,0xff,0xfe,0x3f,0xfc,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x3,0xe3,0xff,0xf8,0x7f,0xfc,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7,0xf0,0xff,0xe1,0xff,0xfe,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7,0xfc,0x3f,0x7,0xff,0xfe,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x7,0xfe,0x0,0x1f,0xff,0xfe,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x7,0xff,0xc0,0xff,0xff,0xff,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x7,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xf,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xf,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x7f,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x0,0xf,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x0,0x7,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x7,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x3,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x2,0x0,0x0,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1,0x0,0x0,0x7f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x80,0x0,0x3f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x40,0x0,0x3f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x20,0x0,0x1f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0xf,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x10,0x0,0xf,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xc0,0x10,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x8,0x0,0x7,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0x80,0x20,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,0x7,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0x0,0x20,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x4,0x0,0x3,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0x0,0x40,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x2,0x0,0x1,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xfe,0x0,0x40,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2,0x0,0x1,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xfe,0x0,0x80,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1,0x0,0x0,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xfc,0x0,0x80,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x1,0x0,0x0,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xfc,0x1,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x1,0x80,0x0,0x7f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xf8,0x1,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x80,0x0,0x7f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xf8,0x2,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0xc0,0x0,0x7f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xf0,0x2,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0xc0,0x0,0x3f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xf0,0x6,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x40,0x0,0x3f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xe0,0x4,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0,0x60,0x0,0x1f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xe0,0x4,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x60,0x0,0x1f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xc0,0xc,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x60,0x0,0x1f,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xc0,0xc,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x60,0x0,0xf,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xc0,0x8,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x30,0x0,0xf,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x80,0x8,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x30,0x0,0xf,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x80,0x18,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x30,0x0,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x80,0x18,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x30,0x0,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x0,0x18,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x30,0x0,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x0,0x18,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x30,0x0,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x0,0x18,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x70,0x0,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfe,0x0,0x18,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x70,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfe,0x0,0x18,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x70,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfe,0x0,0x18,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x70,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfe,0x0,0x18,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xf0,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x18,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x1c,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x1c,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x1c,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x3e,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x1e,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x7,0x80,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0xe,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1e,0x1,0xe0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0xf,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x3f,0xc0,0x70,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x7,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x7f,0xf0,0x38,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x7f,0xf8,0xc,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xfe,0x6,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0x2,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0xff,0x3,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x7f,0xff,0x3,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xfc,0x1e,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x84,0x7f,0xff,0x3,0x7,0xff,0xff,0xf0, +0xff,0xff,0xff,0xf8,0x7f,0x80,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc,0x7f,0xfe,0x2,0xf,0xff,0xff,0xf0, +0xff,0xff,0xff,0xf0,0xff,0xe0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x7f,0xfe,0x0,0xf,0xff,0xff,0xf0, +0xff,0xff,0xff,0xe1,0xff,0xf0,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1e,0x3f,0xfc,0x0,0x3,0xff,0xff,0xf0, +0xff,0xff,0xff,0xc3,0xff,0xf8,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x3e,0x1f,0xf0,0x0,0x1,0xff,0xff,0xf0, +0xff,0xff,0xff,0xc7,0xff,0xfc,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x3e,0xf,0xe0,0xf,0xe0,0xff,0xff,0xf0, +0xff,0xff,0xff,0x87,0xff,0xfe,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x7f,0x2,0x0,0x1f,0xf8,0x7f,0xff,0xf0, +0xff,0xff,0xff,0xf,0xff,0xfe,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x7f,0x80,0x0,0x3f,0xfc,0x7f,0xff,0xf0, +0xff,0xff,0xfe,0x1f,0xff,0xff,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x7f,0x80,0x0,0xff,0xfc,0x3f,0xff,0xf0, +0xff,0xff,0xf8,0x3f,0xff,0xff,0x80,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x7f,0xc0,0x3,0xff,0xfe,0x3f,0xff,0xf0, +0xff,0xff,0xc0,0x7f,0xff,0xff,0x80,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xf0,0xf,0xff,0xfe,0x3f,0xff,0xf0, +0xff,0xff,0x0,0xff,0xff,0xff,0xc0,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xf0, +0xff,0xfc,0x3,0xff,0xff,0xff,0xc0,0x0,0x7f,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xf0, +0xff,0xf0,0x1f,0xff,0xff,0xff,0xe0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xf0, +0xff,0xe0,0xff,0xff,0xff,0xff,0xe0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0xf0, +0xff,0xe1,0xff,0xff,0xff,0xff,0xf0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x8f,0xff,0xf0, +0xff,0xc3,0xff,0xff,0xff,0xff,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xff,0xf8,0xff,0xff,0xff,0xff,0xff,0x8f,0xff,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xf8,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0x8f,0xff,0xf0, +0xff,0x87,0xff,0xff,0xff,0xff,0xf8,0x0,0x7,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0x87,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xfc,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xc7,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xfc,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xfe,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xe1,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xfe,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xe1,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0x80,0x1,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf8,0x7f,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0xc0,0x1,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xfc,0x3f,0xf0, +0xff,0x87,0xff,0xff,0xff,0xff,0xff,0xc0,0x3,0xff,0xff,0xff,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0xfe,0x3f,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xe0,0x7,0xff,0xff,0xff,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0xfe,0x1f,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xf0,0xf,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xf8,0x7f,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xfc,0x3f,0xff,0xff,0xff,0xff,0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xfe,0x1f,0xff,0xff,0xff,0xff,0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0xff,0xff,0xff,0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xf0, +0xff,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0x7,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xfe,0xf,0xff,0xff,0xff,0xff,0xff,0xfe,0x1f,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0xff,0xff,0xff,0xf8,0xf,0xff,0xff,0xff,0xff,0xff,0xf8,0x3f,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xe0,0xf,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xf0, +0xff,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x7f,0xff,0xff,0xff,0x80,0x1f,0xff,0xff,0xff,0xff,0xff,0xc0,0xff,0xf0, +0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xfe,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0x3,0xff,0xf0, +0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x3,0xff,0xff,0xf0,0x0,0x1f,0xff,0xff,0xff,0xff,0xfc,0x7,0xff,0xf0, +0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x3f,0xfe,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xf0,0x1f,0xff,0xf0, +0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xc0,0x7f,0xff,0xf0, +0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0x1,0xff,0xff,0xf0, +0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xfc,0x7,0xff,0xff,0xf0, +0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xf8,0x1f,0xff,0xff,0xf0, +0xff,0x87,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xf0, +0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xf0, +0xff,0xe0,0xf,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0xc3,0xff,0xff,0xff,0xf0, +0xff,0xf0,0x0,0xf,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xff,0x87,0xff,0xff,0xff,0xf0, +0xff,0xfc,0x0,0x0,0x7f,0xff,0xff,0xff,0xf8,0x0,0x1f,0xff,0xf0,0x0,0x3f,0xff,0xff,0xff,0xf,0xff,0xff,0xff,0xf0, +0xff,0xff,0xe0,0x0,0x7,0xff,0xff,0xff,0xf8,0x7,0xff,0xff,0xff,0xfe,0x1f,0xff,0xff,0xfe,0x1f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xc0,0x0,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xfc,0x3f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0x0,0x3f,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0xff,0xf8,0x7f,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xf0,0xf,0xff,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0x8f,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xfe,0x3,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xff,0x87,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0x80,0x3f,0xfe,0xf,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0xff,0x83,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xe0,0x0,0x0,0x1f,0xff,0xff,0xff,0xff,0xff,0xe1,0xff,0xfe,0x7,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,0x3f,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xf8,0x1f,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf,0x80,0x3f,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x0,0x0,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0 +}; + // Setup void setup() { tft.begin(); @@ -87,6 +315,15 @@ void loop() { tft.drawLine(30, 40, 70, 80, COLOR_YELLOW); delay(1000); } + + tft.setOrientation(0); + tft.clear(); + tft.drawText(10, 100, "drawing bitmap"); + delay(1000); + tft.clear(); + tft.setBackgroundColor(COLOR_BLACK); + tft.drawBitmap(0, 0, tux, 180, 220, COLOR_WHITE); + delay(5000); tft.setOrientation(0); tft.clear(); diff --git a/images/tux.png b/images/tux.png new file mode 100644 index 0000000000000000000000000000000000000000..581ca102b51c6aef35326ebb5d520472179d8fdc GIT binary patch literal 13345 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