| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #include <stdint.h>
- #include <stdio.h>
- #include "images.h"
- //-----------------------------------------------------------------------------
- // This will be the plot function out of your graphics library
- //
- #define PLOT(x,y,c) do { \
- printf("%s", (c ? "#" : ".")); \
- if (x == img->w -1) printf("\n") ; \
- }while(0)
- //+============================================================================
- // The pain we endure to avoid code duplication cleanly
- //
- #define PLOTBYTE(b) do { \
- for (uint8_t m = 0x80; m; m>>=1) { \
- PLOT(x,y, (b & m)); \
- if ( ((++x) == img->w) && !(x = 0) && ((++y) == img->h) ) break ; \
- } \
- }while(0)
- void show (const image_t* img)
- {
- // Some variables
- const uint8_t* bp = img->data;
- unsigned int x = 0;
- unsigned int y = 0;
- // Compressed
- if (img->c) {
- for (unsigned int i = 0; i < img->len; i++, bp++) {
- // Compressed data? {tag, length, value}
- if (*bp == img->tag) {
- for (uint16_t c = 0; c < bp[1]; c++) PLOTBYTE(bp[2]) ;
- bp += 3 -1;
- i += 3 -1;
- // Uncompressed byte
- } else {
- PLOTBYTE(*bp);
- }
- }
- // Not compressed
- } else {
- for (unsigned int i = 0; i < img->len; i++, bp++) PLOTBYTE(*bp) ;
- }
- }
- #undef PLOTBYTE
- //+============================================================================
- int main (void)
- {
- show(&img_zzz);
- return 0;
- }
|