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;
18 int fd = open("/tmp/dump.txt", O_WRONLY|O_CREAT|O_LARGEFILE, 0644);
21 static int read_png_file(char* file_name)
23 /* 8 is the maximum size that can be checked */
24 char header[8] = {0,};
26 /* open file and test for it being a png */
27 FILE *fp = fopen(file_name, "rb");
30 fprintf(stderr, "[read_png_file] File %s could not be opened for reading\n", file_name);
34 fread(header, 1, 8, fp);
35 if (png_sig_cmp((png_byte*)header, 0, 8))
37 fprintf(stderr, "[read_png_file] File %s is not recognized as a PNG file\n", file_name);
41 /* initialize stuff */
42 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
46 fprintf(stderr, "[read_png_file] png_create_read_struct failed\n");
50 info_ptr = png_create_info_struct(png_ptr);
53 fprintf(stderr, "[read_png_file] png_create_info_struct failed\n");
57 if (setjmp(png_jmpbuf(png_ptr)))
59 fprintf(stderr, "[read_png_file] Error during init_io\n");
63 png_init_io(png_ptr, fp);
64 png_set_sig_bytes(png_ptr, 8);
66 png_read_info(png_ptr, info_ptr);
68 width = png_get_image_width(png_ptr, info_ptr);
69 height = png_get_image_height(png_ptr, info_ptr);
70 color_type = png_get_color_type(png_ptr, info_ptr);
71 bit_depth = png_get_bit_depth(png_ptr, info_ptr);
73 number_of_passes = png_set_interlace_handling(png_ptr);
74 png_read_update_info(png_ptr, info_ptr);
77 if (setjmp(png_jmpbuf(png_ptr)))
79 fprintf(stderr, "[read_png_file] Error during read_image\n");
85 row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);
86 row_byte_len = png_get_rowbytes(png_ptr,info_ptr);
87 for (y=0; y<height; y++)
89 row_pointers[y] = (png_byte*) malloc(row_byte_len);
91 row_pointers_bit_shift = (unsigned char*) malloc(sizeof(unsigned char) * height * width * 2);
94 png_read_image(png_ptr, row_pointers);
95 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
100 PNGUtil *PNGUtil::instance = 0;
113 PNGUtil *PNGUtil::getInstance()
118 int PNGUtil::connect()
120 const char* device_file_name = "/dev/lcd2";
121 device_fd = open("/dev/lcd2", O_RDWR);
127 void PNGUtil::disconnect()
136 int PNGUtil::send(char* png_file_name)
140 fprintf(stderr, "unloaded!! retry.. connect!!\n");
143 if(!read_png_file(png_file_name))
150 int row_pointers_ptr = 0;
151 int row_pointers_2_ptr = 0;
153 for(i=0;i<height;i++)
155 for(j=0;j<row_byte_len;j+=3)
157 row_pointers_bit_shift[row_pointers_2_ptr]=(row_pointers[i][j]&248)|(row_pointers[i][j+1]>>5);
158 row_pointers_bit_shift[row_pointers_2_ptr+1]=((row_pointers[i][j+1]&28)<<3)|(row_pointers[i][j+2]>>3);
159 row_pointers_2_ptr += 2;
165 int w = write(fd, row_pointers_bit_shift , height * width * 2);
166 printf("write to dst_fd : %d\n",w);
172 w = write(device_fd, row_pointers_bit_shift, height * width * 2);
173 printf("write ret : %d\n",w);
174 // ret = ioctl(device_fd, 0);
175 printf("write to /dev/lcd2 : %d\n",w);