4 static int width, height;
6 static png_byte color_type;
7 static png_byte bit_depth;
9 static png_structp png_ptr;
10 static png_infop info_ptr;
11 static int number_of_passes;
12 static png_bytep * row_pointers = 0;
13 static png_bytep row_pointers_bit_shift = 0;
14 static int row_byte_len = 0;
16 static int read_png_file(char* file_name)
18 /* 8 is the maximum size that can be checked */
19 char header[8] = {0,};
21 /* open file and test for it being a png */
22 FILE *fp = fopen(file_name, "rb");
25 fprintf(stderr, "[read_png_file] File %s could not be opened for reading\n", file_name);
29 fread(header, 1, 8, fp);
30 if (png_sig_cmp((png_byte*)header, 0, 8))
33 fprintf(stderr, "[read_png_file] File %s is not recognized as a PNG file\n", file_name);
37 /* initialize stuff */
38 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
43 fprintf(stderr, "[read_png_file] png_create_read_struct failed\n");
47 info_ptr = png_create_info_struct(png_ptr);
50 png_destroy_read_struct(&png_ptr, NULL, NULL);
52 fprintf(stderr, "[read_png_file] png_create_info_struct failed\n");
56 if (setjmp(png_jmpbuf(png_ptr)))
58 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
60 fprintf(stderr, "[read_png_file] Error during init_io\n");
64 png_init_io(png_ptr, fp);
65 png_set_sig_bytes(png_ptr, 8);
67 png_read_info(png_ptr, info_ptr);
69 width = png_get_image_width(png_ptr, info_ptr);
70 height = png_get_image_height(png_ptr, info_ptr);
71 if (width != 400 || height != 240)
73 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
75 fprintf(stderr, "[read_png_file] Error invalid image size\n");
78 color_type = png_get_color_type(png_ptr, info_ptr);
79 bit_depth = png_get_bit_depth(png_ptr, info_ptr);
81 number_of_passes = png_set_interlace_handling(png_ptr);
82 png_read_update_info(png_ptr, info_ptr);
85 if (setjmp(png_jmpbuf(png_ptr)))
87 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
89 fprintf(stderr, "[read_png_file] Error during read_image\n");
95 row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);
96 row_byte_len = png_get_rowbytes(png_ptr,info_ptr);
97 for (y=0; y<height; y++)
99 row_pointers[y] = (png_byte*) malloc(row_byte_len);
101 row_pointers_bit_shift = (unsigned char*) malloc(sizeof(unsigned char) * height * width * 2);
104 png_read_image(png_ptr, row_pointers);
105 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
110 PNGUtil *PNGUtil::instance = 0;
123 PNGUtil *PNGUtil::getInstance()
128 int PNGUtil::connect()
130 const char* device_file_name = "/dev/lcd2";
131 device_fd = open("/dev/lcd2", O_RDWR);
137 void PNGUtil::disconnect()
146 int PNGUtil::send(char* png_file_name)
150 fprintf(stderr, "unloaded!! retry.. connect!!\n");
153 if(!read_png_file(png_file_name))
160 int row_pointers_ptr = 0;
161 int row_pointers_2_ptr = 0;
163 for(i=0;i<height;i++)
165 for(j=0;j<row_byte_len;j+=3)
167 row_pointers_bit_shift[row_pointers_2_ptr]=(row_pointers[i][j]&248)|(row_pointers[i][j+1]>>5);
168 row_pointers_bit_shift[row_pointers_2_ptr+1]=((row_pointers[i][j+1]&28)<<3)|(row_pointers[i][j+2]>>3);
169 row_pointers_2_ptr += 2;
175 w = write(device_fd, row_pointers_bit_shift, height * width * 2);
176 printf("write ret : %d\n",w);
177 // ret = ioctl(device_fd, 0);
178 printf("write to /dev/lcd2 : %d\n",w);