Drawing images from memory/buffer

Which platform are you using? You can look at the documtation for each platform.

I am using Vexcode. I’ve searched this up online, and have also looked through the api documentation, but I haven’t really found any useful information (in fact, I couldn’t find it in the documentation - maybe i’m just blind).

This version

bool brain::lcd::drawImageFromBuffer( uint32_t *buffer, int x, int y, int width, int height )

is used to draw completely raw data to the V5 screen. Perhaps you have written some other form of image decoder or have created a test pattern in a memory buffer.

this version

bool  brain::lcd::drawImageFromBuffer( uint8_t *buffer, int x, int y, int bufferLen )

will draw a PNG or BMP image that you have either embedded in code or read in from a file.

here’s a small demo.

large code
/*----------------------------------------------------------------------------*/
/*                                                                            */
/*    Module:       main.cpp                                                  */
/*    Author:       james                                                     */
/*    Created:      Tue Sep 03 2019                                           */
/*    Description:  V5 project                                                */
/*                                                                            */
/*----------------------------------------------------------------------------*/
#include "vex.h"

using namespace vex;

// A global instance of vex::brain used for printing to the V5 brain screen
vex::brain       Brain;

// define your global instances of motors and other devices here
#define YSIZE 240
#define XSIZE 240
uint32_t  buffer[YSIZE * XSIZE];

// forward ref, just to keep code cleaner
extern uint8_t _vex_logo[8192];

int main() {
    // lets create a ramp
    for(int y=0;y<YSIZE;y++) {
      for(int x=0;x<XSIZE;x++) {
        // create rgb value
        int32_t rgb = (x << 16) + (x << 8) + x;
        buffer[ y * XSIZE + x ] = rgb;
      }
    }

    // display a raw buffer
    Brain.Screen.drawImageFromBuffer( buffer, 0, 0, YSIZE, YSIZE );

    // display image from buffer
    Brain.Screen.drawImageFromBuffer( _vex_logo, 30, 60, sizeof(_vex_logo)  );

    while(1) {
        // Allow other tasks to run
        this_thread::sleep_for(10);
    }
}


uint8_t _vex_logo[] = {
  0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,
  0x00,0x00,0x00,0xB4,0x00,0x00,0x00,0x3C,0x08,0x03,0x00,0x00,0x00,0xF8,0xF0,0x60,
  0xB5,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0B,0x13,0x00,0x00,0x0B,
  0x13,0x01,0x00,0x9A,0x9C,0x18,0x00,0x00,0x0A,0x4F,0x69,0x43,0x43,0x50,0x50,0x68,
  0x6F,0x74,0x6F,0x73,0x68,0x6F,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6F,0x66,
  0x69,0x6C,0x65,0x00,0x00,0x78,0xDA,0x9D,0x53,0x67,0x54,0x53,0xE9,0x16,0x3D,0xF7,
  0xDE,0xF4,0x42,0x4B,0x88,0x80,0x94,0x4B,0x6F,0x52,0x15,0x08,0x20,0x52,0x42,0x8B,
  0x80,0x14,0x91,0x26,0x2A,0x21,0x09,0x10,0x4A,0x88,0x21,0xA1,0xD9,0x15,0x51,0xC1,
  0x11,0x45,0x45,0x04,0x1B,0xC8,0xA0,0x88,0x03,0x8E,0x8E,0x80,0x8C,0x15,0x51,0x2C,
  0x0C,0x8A,0x0A,0xD8,0x07,0xE4,0x21,0xA2,0x8E,0x83,0xA3,0x88,0x8A,0xCA,0xFB,0xE1,
  0x7B,0xA3,0x6B,0xD6,0xBC,0xF7,0xE6,0xCD,0xFE,0xB5,0xD7,0x3E,0xE7,0xAC,0xF3,0x9D,
  0xB3,0xCF,0x07,0xC0,0x08,0x0C,0x96,0x48,0x33,0x51,0x35,0x80,0x0C,0xA9,0x42,0x1E,
  0x11,0xE0,0x83,0xC7,0xC4,0xC6,0xE1,0xE4,0x2E,0x40,0x81,0x0A,0x24,0x70,0x00,0x10,
  0x08,0xB3,0x64,0x21,0x73,0xFD,0x23,0x01,0x00,0xF8,0x7E,0x3C,0x3C,0x2B,0x22,0xC0,
  0x07,0xBE,0x00,0x01,0x78,0xD3,0x0B,0x08,0x00,0xC0,0x4D,0x9B,0xC0,0x30,0x1C,0x87,
  0xFF,0x0F,0xEA,0x42,0x99,0x5C,0x01,0x80,0x84,0x01,0xC0,0x74,0x91,0x38,0x4B,0x08,
  0x80,0x14,0x00,0x40,0x7A,0x8E,0x42,0xA6,0x00,0x40,0x46,0x01,0x80,0x9D,0x98,0x26,
  0x53,0x00,0xA0,0x04,0x00,0x60,0xCB,0x63,0x62,0xE3,0x00,0x50,0x2D,0x00,0x60,0x27,
  0x7F,0xE6,0xD3,0x00,0x80,0x9D,0xF8,0x99,0x7B,0x01,0x00,0x5B,0x94,0x21,0x15,0x01,
  0xA0,0x91,0x00,0x20,0x13,0x65,0x88,0x44,0x00,0x68,0x3B,0x00,0xAC,0xCF,0x56,0x8A,
  0x45,0x00,0x58,0x30,0x00,0x14,0x66,0x4B,0xC4,0x39,0x00,0xD8,0x2D,0x00,0x30,0x49,
  0x57,0x66,0x48,0x00,0xB0,0xB7,0x00,0xC0,0xCE,0x10,0x0B,0xB2,0x00,0x08,0x0C,0x00,
  0x30,0x51,0x88,0x85,0x29,0x00,0x04,0x7B,0x00,0x60,0xC8,0x23,0x23,0x78,0x00,0x84,
  0x99,0x00,0x14,0x46,0xF2,0x57,0x3C,0xF1,0x2B,0xAE,0x10,0xE7,0x2A,0x00,0x00,0x78,
  0x99,0xB2,0x3C,0xB9,0x24,0x39,0x45,0x81,0x5B,0x08,0x2D,0x71,0x07,0x57,0x57,0x2E,
  0x1E,0x28,0xCE,0x49,0x17,0x2B,0x14,0x36,0x61,0x02,0x61,0x9A,0x40,0x2E,0xC2,0x79,
  0x99,0x19,0x32,0x81,0x34,0x0F,0xE0,0xF3,0xCC,0x00,0x00,0xA0,0x91,0x15,0x11,0xE0,
  0x83,0xF3,0xFD,0x78,0xCE,0x0E,0xAE,0xCE,0xCE,0x36,0x8E,0xB6,0x0E,0x5F,0x2D,0xEA,
  0xBF,0x06,0xFF,0x22,0x62,0x62,0xE3,0xFE,0xE5,0xCF,0xAB,0x70,0x40,0x00,0x00,0xE1,
  0x74,0x7E,0xD1,0xFE,0x2C,0x2F,0xB3,0x1A,0x80,0x3B,0x06,0x80,0x6D,0xFE,0xA2,0x25,
  0xEE,0x04,0x68,0x5E,0x0B,0xA0,0x75,0xF7,0x8B,0x66,0xB2,0x0F,0x40,0xB5,0x00,0xA0,
  0xE9,0xDA,0x57,0xF3,0x70,0xF8,0x7E,0x3C,0x3C,0x45,0xA1,0x90,0xB9,0xD9,0xD9,0xE5,
  0xE4,0xE4,0xD8,0x4A,0xC4,0x42,0x5B,0x61,0xCA,0x57,0x7D,0xFE,0x67,0xC2,0x5F,0xC0,
  0x57,0xFD,0x6C,0xF9,0x7E,0x3C,0xFC,0xF7,0xF5,0xE0,0xBE,0xE2,0x24,0x81,0x32,0x5D,
  0x81,0x47,0x04,0xF8,0xE0,0xC2,0xCC,0xF4,0x4C,0xA5,0x1C,0xCF,0x92,0x09,0x84,0x62,
  0xDC,0xE6,0x8F,0x47,0xFC,0xB7,0x0B,0xFF,0xFC,0x1D,0xD3,0x22,0xC4,0x49,0x62,0xB9,
  0x58,0x2A,0x14,0xE3,0x51,0x12,0x71,0x8E,0x44,0x9A,0x8C,0xF3,0x32,0xA5,0x22,0x89,
  0x42,0x92,0x29,0xC5,0x25,0xD2,0xFF,0x64,0xE2,0xDF,0x2C,0xFB,0x03,0x3E,0xDF,0x35,
  0x00,0xB0,0x6A,0x3E,0x01,0x7B,0x91,0x2D,0xA8,0x5D,0x63,0x03,0xF6,0x4B,0x27,0x10,
  0x58,0x74,0xC0,0xE2,0xF7,0x00,0x00,0xF2,0xBB,0x6F,0xC1,0xD4,0x28,0x08,0x03,0x80,
  0x68,0x83,0xE1,0xCF,0x77,0xFF,0xEF,0x3F,0xFD,0x47,0xA0,0x25,0x00,0x80,0x66,0x49,
  0x92,0x71,0x00,0x00,0x5E,0x44,0x24,0x2E,0x54,0xCA,0xB3,0x3F,0xC7,0x08,0x00,0x00,
  0x44,0xA0,0x81,0x2A,0xB0,0x41,0x1B,0xF4,0xC1,0x18,0x2C,0xC0,0x06,0x1C,0xC1,0x05,
  0xDC,0xC1,0x0B,0xFC,0x60,0x36,0x84,0x42,0x24,0xC4,0xC2,0x42,0x10,0x42,0x0A,0x64,
  0x80,0x1C,0x72,0x60,0x29,0xAC,0x82,0x42,0x28,0x86,0xCD,0xB0,0x1D,0x2A,0x60,0x2F,
  0xD4,0x40,0x1D,0x34,0xC0,0x51,0x68,0x86,0x93,0x70,0x0E,0x2E,0xC2,0x55,0xB8,0x0E,
  0x3D,0x70,0x0F,0xFA,0x61,0x08,0x9E,0xC1,0x28,0xBC,0x81,0x09,0x04,0x41,0xC8,0x08,
  0x13,0x61,0x21,0xDA,0x88,0x01,0x62,0x8A,0x58,0x23,0x8E,0x08,0x17,0x99,0x85,0xF8,
  0x21,0xC1,0x48,0x04,0x12,0x8B,0x24,0x20,0xC9,0x88,0x14,0x51,0x22,0x4B,0x91,0x35,
  0x48,0x31,0x52,0x8A,0x54,0x20,0x55,0x48,0x1D,0xF2,0x3D,0x72,0x02,0x39,0x87,0x5C,
  0x46,0xBA,0x91,0x3B,0xC8,0x00,0x32,0x82,0xFC,0x86,0xBC,0x47,0x31,0x94,0x81,0xB2,
  0x51,0x3D,0xD4,0x0C,0xB5,0x43,0xB9,0xA8,0x37,0x1A,0x84,0x46,0xA2,0x0B,0xD0,0x64,
  0x74,0x31,0x9A,0x8F,0x16,0xA0,0x9B,0xD0,0x72,0xB4,0x1A,0x3D,0x8C,0x36,0xA1,0xE7,
  0xD0,0xAB,0x68,0x0F,0xDA,0x8F,0x3E,0x43,0xC7,0x30,0xC0,0xE8,0x18,0x07,0x33,0xC4,
  0x6C,0x30,0x2E,0xC6,0xC3,0x42,0xB1,0x38,0x2C,0x09,0x93,0x63,0xCB,0xB1,0x22,0xAC,
  0x0C,0xAB,0xC6,0x1A,0xB0,0x56,0xAC,0x03,0xBB,0x89,0xF5,0x63,0xCF,0xB1,0x77,0x04,
  0x12,0x81,0x45,0xC0,0x09,0x36,0x04,0x77,0x42,0x20,0x61,0x1E,0x41,0x48,0x58,0x4C,
  0x58,0x4E,0xD8,0x48,0xA8,0x20,0x1C,0x24,0x34,0x11,0xDA,0x09,0x37,0x09,0x03,0x84,
  0x51,0xC2,0x27,0x22,0x93,0xA8,0x4B,0xB4,0x26,0xBA,0x11,0xF9,0xC4,0x18,0x62,0x32,
  0x31,0x87,0x58,0x48,0x2C,0x23,0xD6,0x12,0x8F,0x13,0x2F,0x10,0x7B,0x88,0x43,0xC4,
  0x37,0x24,0x12,0x89,0x43,0x32,0x27,0xB9,0x90,0x02,0x49,0xB1,0xA4,0x54,0xD2,0x12,
  0xD2,0x46,0xD2,0x6E,0x52,0x23,0xE9,0x2C,0xA9,0x9B,0x34,0x48,0x1A,0x23,0x93,0xC9,
  0xDA,0x64,0x6B,0xB2,0x07,0x39,0x94,0x2C,0x20,0x2B,0xC8,0x85,0xE4,0x9D,0xE4,0xC3,
  0xE4,0x33,0xE4,0x1B,0xE4,0x21,0xF2,0x5B,0x0A,0x9D,0x62,0x40,0x71,0xA4,0xF8,0x53,
  0xE2,0x28,0x52,0xCA,0x6A,0x4A,0x19,0xE5,0x10,0xE5,0x34,0xE5,0x06,0x65,0x98,0x32,
  0x41,0x55,0xA3,0x9A,0x52,0xDD,0xA8,0xA1,0x54,0x11,0x35,0x8F,0x5A,0x42,0xAD,0xA1,
  0xB6,0x52,0xAF,0x51,0x87,0xA8,0x13,0x34,0x75,0x9A,0x39,0xCD,0x83,0x16,0x49,0x4B,
  0xA5,0xAD,0xA2,0x95,0xD3,0x1A,0x68,0x17,0x68,0xF7,0x69,0xAF,0xE8,0x74,0xBA,0x11,
  0xDD,0x95,0x1E,0x4E,0x97,0xD0,0x57,0xD2,0xCB,0xE9,0x47,0xE8,0x97,0xE8,0x03,0xF4,
  0x77,0x0C,0x0D,0x86,0x15,0x83,0xC7,0x88,0x67,0x28,0x19,0x9B,0x18,0x07,0x18,0x67,
  0x19,0x77,0x18,0xAF,0x98,0x4C,0xA6,0x19,0xD3,0x8B,0x19,0xC7,0x54,0x30,0x37,0x31,
  0xEB,0x98,0xE7,0x99,0x0F,0x99,0x6F,0x55,0x58,0x2A,0xB6,0x2A,0x7C,0x15,0x91,0xCA,
  0x0A,0x95,0x4A,0x95,0x26,0x95,0x1B,0x2A,0x2F,0x54,0xA9,0xAA,0xA6,0xAA,0xDE,0xAA,
  0x0B,0x55,0xF3,0x55,0xCB,0x54,0x8F,0xA9,0x5E,0x53,0x7D,0xAE,0x46,0x55,0x33,0x53,
  0xE3,0xA9,0x09,0xD4,0x96,0xAB,0x55,0xAA,0x9D,0x50,0xEB,0x53,0x1B,0x53,0x67,0xA9,
  0x3B,0xA8,0x87,0xAA,0x67,0xA8,0x6F,0x54,0x3F,0xA4,0x7E,0x59,0xFD,0x89,0x06,0x59,
  0xC3,0x4C,0xC3,0x4F,0x43,0xA4,0x51,0xA0,0xB1,0x5F,0xE3,0xBC,0xC6,0x20,0x0B,0x63,
  0x19,0xB3,0x78,0x2C,0x21,0x6B,0x0D,0xAB,0x86,0x75,0x81,0x35,0xC4,0x26,0xB1,0xCD,
  0xD9,0x7C,0x76,0x2A,0xBB,0x98,0xFD,0x1D,0xBB,0x8B,0x3D,0xAA,0xA9,0xA1,0x39,0x43,
  0x33,0x4A,0x33,0x57,0xB3,0x52,0xF3,0x94,0x66,0x3F,0x07,0xE3,0x98,0x71,0xF8,0x9C,
  0x74,0x4E,0x09,0xE7,0x28,0xA7,0x97,0xF3,0x7E,0x8A,0xDE,0x14,0xEF,0x29,0xE2,0x29,
  0x1B,0xA6,0x34,0x4C,0xB9,0x31,0x65,0x5C,0x6B,0xAA,0x96,0x97,0x96,0x58,0xAB,0x48,
  0xAB,0x51,0xAB,0x47,0xEB,0xBD,0x36,0xAE,0xED,0xA7,0x9D,0xA6,0xBD,0x45,0xBB,0x59,
  0xFB,0x81,0x0E,0x41,0xC7,0x4A,0x27,0x5C,0x27,0x47,0x67,0x8F,0xCE,0x05,0x9D,0xE7,
  0x53,0xD9,0x53,0xDD,0xA7,0x0A,0xA7,0x16,0x4D,0x3D,0x3A,0xF5,0xAE,0x2E,0xAA,0x6B,
  0xA5,0x1B,0xA1,0xBB,0x44,0x77,0xBF,0x6E,0xA7,0xEE,0x98,0x9E,0xBE,0x5E,0x80,0x9E,
  0x4C,0x6F,0xA7,0xDE,0x79,0xBD,0xE7,0xFA,0x1C,0x7D,0x2F,0xFD,0x54,0xFD,0x6D,0xFA,
  0xA7,0xF5,0x47,0x0C,0x58,0x06,0xB3,0x0C,0x24,0x06,0xDB,0x0C,0xCE,0x18,0x3C,0xC5,
  0x35,0x71,0x6F,0x3C,0x1D,0x2F,0xC7,0xDB,0xF1,0x51,0x43,0x5D,0xC3,0x40,0x43,0xA5,
  0x61,0x95,0x61,0x97,0xE1,0x84,0x91,0xB9,0xD1,0x3C,0xA3,0xD5,0x46,0x8D,0x46,0x0F,
  0x8C,0x69,0xC6,0x5C,0xE3,0x24,0xE3,0x6D,0xC6,0x6D,0xC6,0xA3,0x26,0x06,0x26,0x21,
  0x26,0x4B,0x4D,0xEA,0x4D,0xEE,0x9A,0x52,0x4D,0xB9,0xA6,0x29,0xA6,0x3B,0x4C,0x3B,
  0x4C,0xC7,0xCD,0xCC,0xCD,0xA2,0xCD,0xD6,0x99,0x35,0x9B,0x3D,0x31,0xD7,0x32,0xE7,
  0x9B,0xE7,0x9B,0xD7,0x9B,0xDF,0xB7,0x60,0x5A,0x78,0x5A,0x2C,0xB6,0xA8,0xB6,0xB8,
  0x65,0x49,0xB2,0xE4,0x5A,0xA6,0x59,0xEE,0xB6,0xBC,0x6E,0x85,0x5A,0x39,0x59,0xA5,
  0x58,0x55,0x5A,0x5D,0xB3,0x46,0xAD,0x9D,0xAD,0x25,0xD6,0xBB,0xAD,0xBB,0xA7,0x11,
  0xA7,0xB9,0x4E,0x93,0x4E,0xAB,0x9E,0xD6,0x67,0xC3,0xB0,0xF1,0xB6,0xC9,0xB6,0xA9,
  0xB7,0x19,0xB0,0xE5,0xD8,0x06,0xDB,0xAE,0xB6,0x6D,0xB6,0x7D,0x61,0x67,0x62,0x17,
  0x67,0xB7,0xC5,0xAE,0xC3,0xEE,0x93,0xBD,0x93,0x7D,0xBA,0x7D,0x8D,0xFD,0x3D,0x07,
  0x0D,0x87,0xD9,0x0E,0xAB,0x1D,0x5A,0x1D,0x7E,0x73,0xB4,0x72,0x14,0x3A,0x56,0x3A,
  0xDE,0x9A,0xCE,0x9C,0xEE,0x3F,0x7D,0xC5,0xF4,0x96,0xE9,0x2F,0x67,0x58,0xCF,0x10,
  0xCF,0xD8,0x33,0xE3,0xB6,0x13,0xCB,0x29,0xC4,0x69,0x9D,0x53,0x9B,0xD3,0x47,0x67,
  0x17,0x67,0xB9,0x73,0x83,0xF3,0x88,0x8B,0x89,0x4B,0x82,0xCB,0x2E,0x97,0x3E,0x2E,
  0x9B,0x1B,0xC6,0xDD,0xC8,0xBD,0xE4,0x4A,0x74,0xF5,0x71,0x5D,0xE1,0x7A,0xD2,0xF5,
  0x9D,0x9B,0xB3,0x9B,0xC2,0xED,0xA8,0xDB,0xAF,0xEE,0x36,0xEE,0x69,0xEE,0x87,0xDC,
  0x9F,0xCC,0x34,0x9F,0x29,0x9E,0x59,0x33,0x73,0xD0,0xC3,0xC8,0x43,0xE0,0x51,0xE5,
  0xD1,0x3F,0x0B,0x9F,0x95,0x30,0x6B,0xDF,0xAC,0x7E,0x4F,0x43,0x4F,0x81,0x67,0xB5,
  0xE7,0x23,0x2F,0x63,0x2F,0x91,0x57,0xAD,0xD7,0xB0,0xB7,0xA5,0x77,0xAA,0xF7,0x61,
  0xEF,0x17,0x3E,0xF6,0x3E,0x72,0x9F,0xE3,0x3E,0xE3,0x3C,0x37,0xDE,0x32,0xDE,0x59,
  0x5F,0xCC,0x37,0xC0,0xB7,0xC8,0xB7,0xCB,0x4F,0xC3,0x6F,0x9E,0x5F,0x85,0xDF,0x43,
  0x7F,0x23,0xFF,0x64,0xFF,0x7A,0xFF,0xD1,0x00,0xA7,0x80,0x25,0x01,0x67,0x03,0x89,
  0x81,0x41,0x81,0x5B,0x02,0xFB,0xF8,0x7A,0x7C,0x21,0xBF,0x8E,0x3F,0x3A,0xDB,0x65,
  0xF6,0xB2,0xD9,0xED,0x41,0x8C,0xA0,0xB9,0x41,0x15,0x41,0x8F,0x82,0xAD,0x82,0xE5,
  0xC1,0xAD,0x21,0x68,0xC8,0xEC,0x90,0xAD,0x21,0xF7,0xE7,0x98,0xCE,0x91,0xCE,0x69,
  0x0E,0x85,0x50,0x7E,0xE8,0xD6,0xD0,0x07,0x61,0xE6,0x61,0x8B,0xC3,0x7E,0x0C,0x27,
  0x85,0x87,0x85,0x57,0x86,0x3F,0x8E,0x70,0x88,0x58,0x1A,0xD1,0x31,0x97,0x35,0x77,
  0xD1,0xDC,0x43,0x73,0xDF,0x44,0xFA,0x44,0x96,0x44,0xDE,0x9B,0x67,0x31,0x4F,0x39,
  0xAF,0x2D,0x4A,0x35,0x2A,0x3E,0xAA,0x2E,0x6A,0x3C,0xDA,0x37,0xBA,0x34,0xBA,0x3F,
  0xC6,0x2E,0x66,0x59,0xCC,0xD5,0x58,0x9D,0x58,0x49,0x6C,0x4B,0x1C,0x39,0x2E,0x2A,
  0xAE,0x36,0x6E,0x6C,0xBE,0xDF,0xFC,0xED,0xF3,0x87,0xE2,0x9D,0xE2,0x0B,0xE3,0x7B,
  0x17,0x98,0x2F,0xC8,0x5D,0x70,0x79,0xA1,0xCE,0xC2,0xF4,0x85,0xA7,0x16,0xA9,0x2E,
  0x12,0x2C,0x3A,0x96,0x40,0x4C,0x88,0x4E,0x38,0x94,0xF0,0x41,0x10,0x2A,0xA8,0x16,
  0x8C,0x25,0xF2,0x13,0x77,0x25,0x8E,0x0A,0x79,0xC2,0x1D,0xC2,0x67,0x22,0x2F,0xD1,
  0x36,0xD1,0x88,0xD8,0x43,0x5C,0x2A,0x1E,0x4E,0xF2,0x48,0x2A,0x4D,0x7A,0x92,0xEC,
  0x91,0xBC,0x35,0x79,0x24,0xC5,0x33,0xA5,0x2C,0xE5,0xB9,0x84,0x27,0xA9,0x90,0xBC,
  0x4C,0x0D,0x4C,0xDD,0x9B,0x3A,0x9E,0x16,0x9A,0x76,0x20,0x6D,0x32,0x3D,0x3A,0xBD,
  0x31,0x83,0x92,0x91,0x90,0x71,0x42,0xAA,0x21,0x4D,0x93,0xB6,0x67,0xEA,0x67,0xE6,
  0x66,0x76,0xCB,0xAC,0x65,0x85,0xB2,0xFE,0xC5,0x6E,0x8B,0xB7,0x2F,0x1E,0x95,0x07,
  0xC9,0x6B,0xB3,0x90,0xAC,0x05,0x59,0x2D,0x0A,0xB6,0x42,0xA6,0xE8,0x54,0x5A,0x28,
  0xD7,0x2A,0x07,0xB2,0x67,0x65,0x57,0x66,0xBF,0xCD,0x89,0xCA,0x39,0x96,0xAB,0x9E,
  0x2B,0xCD,0xED,0xCC,0xB3,0xCA,0xDB,0x90,0x37,0x9C,0xEF,0x9F,0xFF,0xED,0x12,0xC2,
  0x12,0xE1,0x92,0xB6,0xA5,0x86,0x4B,0x57,0x2D,0x1D,0x58,0xE6,0xBD,0xAC,0x6A,0x39,
  0xB2,0x3C,0x71,0x79,0xDB,0x0A,0xE3,0x15,0x05,0x2B,0x86,0x56,0x06,0xAC,0x3C,0xB8,
  0x8A,0xB6,0x2A,0x6D,0xD5,0x4F,0xAB,0xED,0x57,0x97,0xAE,0x7E,0xBD,0x26,0x7A,0x4D,
  0x6B,0x81,0x5E,0xC1,0xCA,0x82,0xC1,0xB5,0x01,0x6B,0xEB,0x0B,0x55,0x0A,0xE5,0x85,
  0x7D,0xEB,0xDC,0xD7,0xED,0x5D,0x4F,0x58,0x2F,0x59,0xDF,0xB5,0x61,0xFA,0x86,0x9D,
  0x1B,0x3E,0x15,0x89,0x8A,0xAE,0x14,0xDB,0x17,0x97,0x15,0x7F,0xD8,0x28,0xDC,0x78,
  0xE5,0x1B,0x87,0x6F,0xCA,0xBF,0x99,0xDC,0x94,0xB4,0xA9,0xAB,0xC4,0xB9,0x64,0xCF,
  0x66,0xD2,0x66,0xE9,0xE6,0xDE,0x2D,0x9E,0x5B,0x0E,0x96,0xAA,0x97,0xE6,0x97,0x0E,
  0x6E,0x0D,0xD9,0xDA,0xB4,0x0D,0xDF,0x56,0xB4,0xED,0xF5,0xF6,0x45,0xDB,0x2F,0x97,
  0xCD,0x28,0xDB,0xBB,0x83,0xB6,0x43,0xB9,0xA3,0xBF,0x3C,0xB8,0xBC,0x65,0xA7,0xC9,
  0xCE,0xCD,0x3B,0x3F,0x54,0xA4,0x54,0xF4,0x54,0xFA,0x54,0x36,0xEE,0xD2,0xDD,0xB5,
  0x61,0xD7,0xF8,0x6E,0xD1,0xEE,0x1B,0x7B,0xBC,0xF6,0x34,0xEC,0xD5,0xDB,0x5B,0xBC,
  0xF7,0xFD,0x3E,0xC9,0xBE,0xDB,0x55,0x01,0x55,0x4D,0xD5,0x66,0xD5,0x65,0xFB,0x49,
  0xFB,0xB3,0xF7,0x3F,0xAE,0x89,0xAA,0xE9,0xF8,0x96,0xFB,0x6D,0x5D,0xAD,0x4E,0x6D,
  0x71,0xED,0xC7,0x03,0xD2,0x03,0xFD,0x07,0x23,0x0E,0xB6,0xD7,0xB9,0xD4,0xD5,0x1D,
  0xD2,0x3D,0x54,0x52,0x8F,0xD6,0x2B,0xEB,0x47,0x0E,0xC7,0x1F,0xBE,0xFE,0x9D,0xEF,
  0x77,0x2D,0x0D,0x36,0x0D,0x55,0x8D,0x9C,0xC6,0xE2,0x23,0x70,0x44,0x79,0xE4,0xE9,
  0xF7,0x09,0xDF,0xF7,0x1E,0x0D,0x3A,0xDA,0x76,0x8C,0x7B,0xAC,0xE1,0x07,0xD3,0x1F,
  0x76,0x1D,0x67,0x1D,0x2F,0x6A,0x42,0x9A,0xF2,0x9A,0x46,0x9B,0x53,0x9A,0xFB,0x5B,
  0x62,0x5B,0xBA,0x4F,0xCC,0x3E,0xD1,0xD6,0xEA,0xDE,0x7A,0xFC,0x47,0xDB,0x1F,0x0F,
  0x9C,0x34,0x3C,0x59,0x79,0x4A,0xF3,0x54,0xC9,0x69,0xDA,0xE9,0x82,0xD3,0x93,0x67,
  0xF2,0xCF,0x8C,0x9D,0x95,0x9D,0x7D,0x7E,0x2E,0xF9,0xDC,0x60,0xDB,0xA2,0xB6,0x7B,
  0xE7,0x63,0xCE,0xDF,0x6A,0x0F,0x6F,0xEF,0xBA,0x10,0x74,0xE1,0xD2,0x45,0xFF,0x8B,
  0xE7,0x3B,0xBC,0x3B,0xCE,0x5C,0xF2,0xB8,0x74,0xF2,0xB2,0xDB,0xE5,0x13,0x57,0xB8,
  0x57,0x9A,0xAF,0x3A,0x5F,0x6D,0xEA,0x74,0xEA,0x3C,0xFE,0x93,0xD3,0x4F,0xC7,0xBB,
  0x9C,0xBB,0x9A,0xAE,0xB9,0x5C,0x6B,0xB9,0xEE,0x7A,0xBD,0xB5,0x7B,0x66,0xF7,0xE9,
  0x1B,0x9E,0x37,0xCE,0xDD,0xF4,0xBD,0x79,0xF1,0x16,0xFF,0xD6,0xD5,0x9E,0x39,0x3D,
  0xDD,0xBD,0xF3,0x7A,0x6F,0xF7,0xC5,0xF7,0xF5,0xDF,0x16,0xDD,0x7E,0x72,0x27,0xFD,
  0xCE,0xCB,0xBB,0xD9,0x77,0x27,0xEE,0xAD,0xBC,0x4F,0xBC,0x5F,0xF4,0x40,0xED,0x41,
  0xD9,0x43,0xDD,0x87,0xD5,0x3F,0x5B,0xFE,0xDC,0xD8,0xEF,0xDC,0x7F,0x6A,0xC0,0x77,
  0xA0,0xF3,0xD1,0xDC,0x47,0xF7,0x06,0x85,0x83,0xCF,0xFE,0x91,0xF5,0x8F,0x0F,0x43,
  0x05,0x8F,0x99,0x8F,0xCB,0x86,0x0D,0x86,0xEB,0x9E,0x38,0x3E,0x39,0x39,0xE2,0x3F,
  0x72,0xFD,0xE9,0xFC,0xA7,0x43,0xCF,0x64,0xCF,0x26,0x9E,0x17,0xFE,0xA2,0xFE,0xCB,
  0xAE,0x17,0x16,0x2F,0x7E,0xF8,0xD5,0xEB,0xD7,0xCE,0xD1,0x98,0xD1,0xA1,0x97,0xF2,
  0x97,0x93,0xBF,0x6D,0x7C,0xA5,0xFD,0xEA,0xC0,0xEB,0x19,0xAF,0xDB,0xC6,0xC2,0xC6,
  0x1E,0xBE,0xC9,0x78,0x33,0x31,0x5E,0xF4,0x56,0xFB,0xED,0xC1,0x77,0xDC,0x77,0x1D,
  0xEF,0xA3,0xDF,0x0F,0x4F,0xE4,0x7C,0x20,0x7F,0x28,0xFF,0x68,0xF9,0xB1,0xF5,0x53,
  0xD0,0xA7,0xFB,0x93,0x19,0x93,0x93,0xFF,0x04,0x03,0x98,0xF3,0xFC,0x63,0x33,0x2D,
  0xDB,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4D,0x00,0x00,0x7A,0x25,0x00,0x00,0x80,
  0x83,0x00,0x00,0xF9,0xFF,0x00,0x00,0x80,0xE9,0x00,0x00,0x75,0x30,0x00,0x00,0xEA,
  0x60,0x00,0x00,0x3A,0x98,0x00,0x00,0x17,0x6F,0x92,0x5F,0xC5,0x46,0x00,0x00,0x03,
  0x00,0x50,0x4C,0x54,0x45,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC5,0x02,0x03,0xBD,0x03,
  0x04,0xB5,0x04,0x05,0xA5,0x05,0x06,0x9C,0x06,0x08,0x94,0x06,0x09,0x84,0x06,0x08,
  0x8C,0x07,0x0A,0x7B,0x07,0x09,0x73,0x08,0x0A,0x6B,0x07,0x0B,0x63,0x07,0x0B,0x52,
  0x06,0x08,0x6B,0x08,0x0B,0x4A,0x07,0x09,0x42,0x07,0x09,0x21,0x03,0x06,0x19,0x03,
  0x06,0x08,0x04,0x08,0x10,0x0C,0x10,0x19,0x14,0x19,0x21,0x1C,0x21,0x29,0x24,0x29,
  0x3A,0x35,0x3A,0x31,0x2D,0x31,0x42,0x3D,0x42,0x4A,0x45,0x4A,0x5A,0x55,0x5A,0x19,
  0x18,0x19,0x21,0x20,0x21,0x29,0x28,0x29,0x63,0x61,0x63,0x7B,0x79,0x7B,0x73,0x71,
  0x73,0x6B,0x69,0x6B,0x3A,0x39,0x3A,0x8C,0x8A,0x8C,0x84,0x82,0x84,0x52,0x51,0x52,
  0x4A,0x49,0x4A,0x42,0x41,0x42,0x5A,0x59,0x5A,0x7B,0x7D,0x84,0x63,0x65,0x6B,0x6B,
  0x6D,0x73,0x73,0x75,0x7B,0x84,0x86,0x8C,0x5A,0x5D,0x63,0x19,0x1C,0x21,0x21,0x24,
  0x29,0x3A,0x3D,0x42,0x42,0x45,0x4A,0x4A,0x4D,0x52,0x52,0x55,0x5A,0x10,0x14,0x19,
  0x31,0x35,0x3A,0x29,0x2D,0x31,0x6B,0x71,0x73,0x73,0x79,0x7B,0x84,0x8A,0x8C,0x7B,
  0x82,0x84,0x4A,0x51,0x52,0x00,0x04,0x00,0x08,0x0C,0x08,0x10,0x14,0x10,0x19,0x1C,
  0x19,0x29,0x2D,0x29,0x21,0x24,0x21,0x31,0x35,0x31,0x3A,0x3D,0x3A,0x42,0x45,0x42,
  0x52,0x55,0x52,0x4A,0x4D,0x4A,0x5A,0x5D,0x5A,0x63,0x65,0x63,0x7B,0x7D,0x7B,0x73,
  0x75,0x73,0x6B,0x6D,0x6B,0x8C,0x8E,0x8C,0x84,0x86,0x84,0x10,0x03,0x00,0x19,0x03,
  0x00,0xDE,0x00,0x00,0xD6,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0xCE,0x01,0x01,
  0xC5,0x03,0x03,0xAD,0x05,0x05,0x84,0x08,0x08,0x63,0x07,0x07,0x5A,0x08,0x08,0x3A,
  0x05,0x05,0x52,0x08,0x08,0x31,0x05,0x05,0x29,0x05,0x05,0x31,0x31,0x31,0x10,0x10,
  0x10,0x08,0x08,0x08,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  0xFF,0xFF,0xFF,0xFF,0xFF,0xAA,0x5F,0xE3,0x08,0x00,0x00,0x04,0x5F,0x49,0x44,0x41,
  0x54,0x78,0xDA,0xEC,0x59,0x49,0x4F,0x14,0x41,0x14,0x7E,0xD0,0xA0,0x08,0x22,0xC8,
  0x0C,0x88,0x01,0x21,0xAC,0xF6,0x8C,0x08,0xC1,0xA0,0x24,0x6A,0x08,0x46,0xC5,0x05,
  0x09,0x13,0xE3,0xDD,0x04,0xFD,0x59,0xA2,0x17,0x2F,0x1A,0x0F,0xED,0x1E,0x16,0x63,
  0x88,0x21,0xE8,0xC5,0x31,0x71,0x18,0x9A,0x01,0x11,0x70,0x8B,0x32,0xAC,0xB2,0xB8,
  0xE1,0x78,0x60,0xA0,0xEB,0x75,0x77,0x2D,0x0D,0xE5,0xA4,0x49,0xA6,0x4E,0xF5,0x6A,
  0xFD,0xA6,0xFA,0xAB,0xF7,0xBE,0x57,0x03,0x90,0x2C,0xC9,0x42,0x2D,0x29,0x52,0x57,
  0xCB,0x3D,0xC3,0xEA,0xCD,0xBE,0x25,0x69,0x9B,0x54,0x99,0x98,0x73,0x98,0x98,0xE1,
  0xBB,0xAC,0x7D,0xD2,0x24,0x62,0xBE,0xC2,0xFD,0x10,0x73,0xAE,0x3B,0x69,0xFE,0x52,
  0x67,0xDD,0x47,0x8F,0xCB,0xDC,0x11,0x31,0xD7,0x81,0xDE,0x99,0xB8,0x5B,0x2F,0x0F,
  0x74,0x1B,0x7F,0x48,0x8F,0xDB,0x40,0x67,0x09,0x8C,0x99,0x73,0x1B,0xE8,0x0B,0xFC,
  0x21,0xD9,0x6E,0x74,0x79,0x00,0x70,0x2F,0x21,0x11,0x51,0x6A,0x70,0x01,0x0D,0xB6,
  0x21,0xE8,0x3F,0xDB,0x11,0x34,0x24,0x41,0x27,0x41,0x6F,0x29,0x2A,0xBA,0x0F,0x74,
  0x5B,0x62,0x40,0x4B,0x4B,0x02,0xE2,0xBA,0x34,0xFD,0x2E,0x7D,0xC8,0xAA,0xEB,0x40,
  0x67,0x5E,0x4C,0x5C,0xE8,0x91,0x46,0x8F,0x65,0x81,0x31,0x79,0xAE,0xE3,0xF4,0xFD,
  0xC4,0x09,0xA6,0x38,0x3D,0x1A,0x89,0xE3,0x78,0x2A,0x34,0xB1,0x41,0x31,0xEA,0xAF,
  0xC4,0xB2,0xAD,0x75,0x7E,0x34,0xA2,0x14,0xAC,0x8B,0x35,0x01,0x0D,0xAD,0xE9,0xC4,
  0x82,0x69,0xBF,0xE3,0x5F,0x5B,0x6C,0x6E,0xD8,0x23,0x3A,0xB3,0x0A,0x6F,0x76,0x8E,
  0x8E,0xFA,0xDA,0x34,0x32,0xA3,0xA6,0x93,0x2E,0x39,0x42,0x66,0xCD,0xCF,0xB8,0x1B,
  0xA3,0xE5,0xF2,0x6E,0x0A,0x1E,0x74,0x57,0x3C,0x1F,0x0F,0xE0,0x66,0xEF,0x0D,0x8A,
  0x03,0x55,0x90,0x19,0x9C,0x30,0x49,0xD3,0xC9,0xC9,0x80,0x23,0xDD,0x3B,0x6D,0x91,
  0x76,0xBB,0x04,0xCE,0x78,0xFD,0x0D,0x41,0x6B,0xC9,0x44,0x27,0x58,0x3E,0x66,0x33,
  0xF8,0x68,0x11,0x32,0x75,0xDD,0xE6,0x22,0x0E,0x11,0x03,0x02,0xBC,0xDD,0xAB,0xAD,
  0x4D,0xAD,0x7C,0xCC,0xC6,0xEF,0xEA,0xC6,0x1A,0xB6,0xD6,0x66,0xC3,0x06,0x3A,0x66,
  0xC2,0x4F,0x93,0x13,0x7F,0xB2,0x2F,0xA3,0xAA,0x5A,0x35,0xF4,0x15,0x87,0x9E,0xF8,
  0x12,0x4E,0x3F,0x56,0x30,0xB3,0xAF,0x47,0x71,0x58,0x7A,0x88,0x4C,0x83,0x36,0x7A,
  0x46,0xAE,0x91,0xCF,0xC4,0xA6,0x19,0xFB,0x1D,0xF4,0x19,0xF5,0x70,0x7F,0xBC,0xE2,
  0x07,0x00,0x78,0x24,0x2E,0xA8,0x23,0x7A,0x3E,0xC9,0x91,0x74,0xF5,0xE4,0x6B,0xC3,
  0xAA,0xC0,0x0C,0xED,0x0F,0x52,0xFD,0xF4,0x1B,0xA2,0xD9,0xC7,0xDA,0x8F,0xEC,0x8C,
  0xA0,0x9E,0x1F,0x4E,0xFC,0xCF,0x8B,0x30,0xF6,0x0D,0xCD,0x1B,0xD5,0xC3,0x87,0x51,
  0xCF,0xFC,0x14,0x23,0xB8,0xCC,0x8B,0xD1,0x9A,0xEC,0xF2,0x6E,0x25,0x46,0x44,0x30,
  0xB3,0x73,0xE3,0x0B,0x77,0x04,0x2A,0xC8,0xE6,0x41,0xED,0xB9,0x79,0x22,0xE9,0x55,
  0xC6,0xB3,0x09,0x5F,0xAB,0xEA,0x02,0x98,0x3F,0x3E,0xDA,0xA8,0xFA,0x01,0x00,0xC2,
  0x0E,0x61,0xEB,0xFB,0x90,0xD3,0x51,0x8F,0x07,0x01,0x02,0x2B,0x28,0x81,0x7B,0x30,
  0x63,0x9D,0x86,0x5C,0xE1,0x67,0x0F,0xF1,0x7A,0xE1,0xD3,0xB9,0x98,0xDF,0x11,0x8C,
  0xDA,0x14,0x68,0x98,0x88,0x96,0xA0,0xEB,0x58,0x15,0xC1,0x9F,0x38,0xF4,0x92,0xAF,
  0x3D,0xFA,0x89,0x7A,0xCC,0x6F,0x37,0xBE,0x8C,0x34,0xDE,0x9A,0x7B,0x77,0x3B,0xA6,
  0x48,0x54,0x43,0x82,0x55,0xC1,0x98,0xB5,0x51,0x11,0xC1,0xA4,0xB1,0x9D,0x31,0x94,
  0xD4,0x31,0x1F,0x0C,0xCE,0x6F,0x82,0xD9,0x0F,0xA9,0xEF,0x0E,0x03,0xB4,0x1E,0xC5,
  0x2C,0xC4,0x8A,0x99,0xB4,0x3E,0x45,0xD4,0x17,0xDE,0x93,0x3D,0x6B,0xDF,0xC5,0x3F,
  0x9A,0x46,0x2F,0xB4,0x24,0x40,0x57,0x6D,0x9B,0x83,0x9F,0xC4,0x93,0x80,0x00,0xE3,
  0x2C,0x19,0x7D,0xE9,0xED,0x5B,0x49,0x02,0xAC,0xCE,0x6A,0xB6,0xCF,0x89,0x9E,0x5E,
  0xA4,0xAF,0x45,0x9A,0x1E,0xD3,0xB4,0xDF,0x02,0x4C,0xB8,0x4A,0xED,0xD1,0x4C,0xD3,
  0x43,0x5A,0x9F,0xA3,0x24,0xA0,0x97,0x34,0x9A,0x49,0xA3,0x83,0x34,0x3A,0x37,0x91,
  0xB8,0xDD,0xA6,0x77,0xA5,0x63,0xB3,0xA6,0x90,0xB5,0x8E,0xC2,0xA6,0x58,0xC6,0x82,
  0xF1,0xEF,0x4E,0x25,0x11,0x5B,0xA3,0xDD,0x96,0x69,0x61,0x3F,0x17,0xB4,0x8F,0xE6,
  0x12,0xFD,0x27,0x2C,0x72,0x9D,0x1A,0x27,0xEC,0x41,0x23,0xD4,0x45,0x1B,0x73,0x4B,
  0x49,0xC7,0xD1,0x6D,0x17,0xE0,0x54,0x1E,0xE8,0xB4,0x90,0x6D,0xF3,0xE9,0x3A,0x8F,
  0x9D,0x2A,0xDB,0xF1,0xD5,0x51,0x8E,0xE8,0xB1,0xE3,0x71,0x3D,0xD3,0xD9,0x81,0xC8,
  0xEB,0xA3,0x62,0xDB,0x5A,0x40,0xD1,0xEF,0xE5,0xB5,0x8E,0xD6,0x09,0x96,0x11,0xBA,
  0xB1,0x32,0x62,0xB9,0x84,0x4B,0x63,0xB6,0x6B,0x71,0x09,0x72,0xC7,0xD6,0x71,0x1C,
  0xA0,0x0D,0xDF,0xAB,0xA6,0x4E,0x39,0xF8,0xF1,0xA3,0xCB,0x46,0x1E,0x97,0xFA,0x77,
  0xDA,0xEC,0xEC,0xC6,0x28,0xBB,0x84,0x1B,0x99,0x3E,0xE4,0xEF,0x90,0xB5,0xAD,0xB2,
  0x09,0x99,0xDF,0x7A,0x10,0xC7,0x3C,0xF6,0xCC,0x4E,0x11,0x70,0x9C,0x1A,0x40,0xD5,
  0x21,0xC3,0x1C,0x1A,0x96,0xF7,0xC0,0x15,0xB0,0x06,0xE4,0x0B,0xF8,0x41,0xD0,0xD3,
  0x29,0x7A,0xD2,0xF8,0x32,0xAA,0x3A,0x34,0x51,0x04,0xCA,0xD6,0x4A,0x15,0x3E,0xE6,
  0xD8,0x7D,0x00,0x80,0x51,0x1C,0x20,0x57,0x36,0xF2,0x91,0x8E,0x95,0x28,0xD7,0xBB,
  0x52,0x14,0xB5,0xBC,0x73,0x36,0x3D,0x10,0x10,0xB7,0xBB,0xB4,0x1E,0xC7,0xAD,0xC7,
  0x00,0x00,0xED,0x21,0xDF,0x62,0x45,0x27,0xF3,0xA4,0xA9,0x8A,0x40,0xDA,0x39,0xE7,
  0x7B,0xA9,0x5A,0x6D,0xFE,0x07,0x8A,0x2D,0x8A,0x32,0x05,0x00,0xD5,0xFB,0x63,0xDD,
  0x7F,0xBE,0x71,0x40,0xC3,0x6A,0x81,0x5D,0xBC,0x95,0xC6,0xE6,0x12,0xBC,0x2E,0xBA,
  0x71,0x73,0x7A,0x65,0x2A,0xBA,0x8F,0x79,0x1F,0x60,0x75,0x69,0xEF,0x30,0x2C,0xF1,
  0x40,0xCF,0x78,0x33,0x2D,0x6D,0x79,0x41,0x39,0x90,0x5B,0x0F,0x21,0xF3,0xBD,0x45,
  0x69,0x44,0x0A,0x33,0x48,0x33,0x4B,0xD5,0x67,0x3D,0x39,0x23,0x4B,0x02,0x8A,0xC1,
  0x42,0xEB,0x91,0xC1,0xFF,0xE2,0x34,0x16,0x7B,0x6D,0xC6,0x98,0x5E,0x11,0xC8,0x77,
  0xA8,0x14,0x27,0x8B,0x87,0x23,0x52,0x20,0x77,0xCC,0x88,0x51,0xAE,0x01,0xBF,0x17,
  0xBE,0x7D,0x27,0xA8,0xCD,0x02,0xF2,0x09,0x9D,0x7F,0x42,0xFC,0x96,0xD4,0xA1,0xEC,
  0x0E,0x7E,0x3D,0x01,0x1E,0xA7,0x01,0x00,0x76,0xE5,0x92,0x1F,0xE8,0xB5,0x0C,0xD0,
  0x2D,0x0E,0x6E,0xF6,0xD7,0x34,0xF4,0x0E,0xAF,0xA4,0xAC,0x51,0x86,0xF3,0xDF,0x78,
  0xD0,0x6B,0xE4,0x04,0x03,0x72,0xF8,0x8C,0xB4,0xDB,0xF8,0x17,0xF6,0xE0,0xD0,0x31,
  0x32,0xF4,0x47,0x47,0x20,0x59,0x92,0x85,0x57,0xFE,0x0D,0x00,0x3D,0x75,0x08,0x40,
  0x4C,0x82,0xEC,0x0F,0x00,0x00,0x00,0x00,0x49,0x45,0x4E,0x44,0xAE,0x42,0x60,0x82,
};
6 Likes

I like how he called it a small demo. But the dropdown says large code

2 Likes

@jpearman I copied your code sample and tried it exactly as you had it and was still unable to write any image data to the screen. I am reviving this thread because i have found no others that are related to this topic. Any help you could provide would be greatly appreciated

public:
static void generateRawPixelData(unsigned width, unsigned height) {
// vector to store our raw pixel data
uint32_t image[height * width];

// Loop for rows
for (int y = 0; y < height; y++) {
  for (int x = 0; x < width; x++) {
    // create rgb value
    int32_t rgb = (x << 16) + (x << 8) + x;
    image[y * width + x] = rgb;
  }
}
// image data -> buffer
Brain.Screen.drawImageFromBuffer(image, 0, 0, width, height);

}

Let me check, but it’s probably because you have this as local variable

uint32_t image[height * width];

there’s not enough stack to do that.

1 Like

What would be the correct way to do it? Also thank you for the rapid reply. Would it be to just pre define the size manually?

either use a global or static buffer, or allocate and delete as needed.

Code
#include "vex.h"

using namespace vex;

// A global instance of vex::brain used for printing to the V5 brain screen
vex::brain       Brain;

// define your global instances of motors and other devices here

static void generateRawPixelData(unsigned width, unsigned height) {
  // vector to store our raw pixel data
  uint32_t *image;

  image = new uint32_t[ height * width ];

  if( image != NULL ) {
    printf("image is good\n");

    // Loop for rows
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        // create rgb value
        int32_t rgb = (x << 16) + (x << 8) + x;
        image[y * width + x] = rgb;
      }
    }
    // image data -> buffer
    Brain.Screen.drawImageFromBuffer(image, 0, 0, width, height);

    delete image;
  }
}

int main() {
    generateRawPixelData( 200, 200 );

    while(1) {
        // Allow other tasks to run
        this_thread::sleep_for(10);
    }
}

probably best to check for valid dimensions as well, make sure width and height are not too big

2 Likes

with that code and a blank project only containing that code and the robot-config.h file (vex.h as well) I still am getting a completely blank screen (other then the default project name and time running header at the top of the screen) and I can not figure out why. As far as I can tell the function should generate image data.

It did here.
Are you using the latest VEXcode and a V5 brain fully updated to 1.0.8 ?

1 Like

VEXOS is currently at 1.0.8 for the cortex and the VEXcode is at the latest version I even reinstalled it just in case. I am going to test it on another cortex and see if it works.

Alright it was the cortex honestly I should have checked that first thank you very much for your time! I will do some research on why it is not working on that cortex.

I wonder what’s wrong, is the V5 working in all other respects ? Is the UI working ok ? perhaps perform a “Reset All settings” and “Delete Programs…” and see if it works then.

1 Like

That fixed it thank you very much. Have a great day.

1 Like

@jpearman I copied your code directly and tried to use it to display a picture I chose. I generated an uint8 array through https://littlevgl.com/image-to-c-array but I cannot get the picture to show up with the generated array. The display is just dark. For color format I chose RAW. I wonder if something is wrong within the array generation because when I used your data the vex logo prints correctly. Care to take a look?
New%20Project%20(1)

I don’t think you can use the LVGL image converter. The vex logo image in my earlier post was a png (or perhaps bmp, I forget) image directly converted from binary to a C array , that is, every byte in the original file was converted to a text hex value. I don’t know if there are tools available on the internet to do that. The image also needs to be 480x240 or smaller. Here’s a project with your image.
v5code-project-uwuImage.zip (83.8 KB)

5 Likes

Wow thanks a lot! How did you manage to do the conversion? Would you be able to provide code for that?

@jpearman I wrote a very primitive converter with python, but I’m still unable to get the image on the screen. I fed the bmp version of the image into the program and the output is the same as the output from the LVGL image converter. Do you know what’s wrong with the code? The code is as follows:

import binascii
output = []

with open("New_Project_(1).bmp", "rb") as f:
    byte = f.read(1)
    while byte != "":
        output.append("0x" + binascii.hexlify(byte) + ",") #This is probably not the best way to format the output
        byte = f.read(1)

with open('output.txt', 'w') as f:
    for item in output:
        print >> f, item

did you crop the image down to 480x240 ? The original was 272 pixels high.

I tried the lvgl converter with the image I used (I converted and saved as png). Using the converter with color format “Raw” seems to generate the same array as I included in the program I sent you, you would just have to delete all the unnecessary lvgl definitions.

3 Likes

It works finally. Huh that’s weird cuz I tried with a 300x200 bmp file and it didn’t work. I tried to convert it to a 480x240 png file and it finally worked.

For those who are interested in trying to put pictures on the robot, use https://littlevgl.com/image-to-c-array to convert the 480x240 png picture file with RAW as color format. Then replace the uint8_t array in jpearman’s code with the output one. Tested it works.

1 Like