| #include "bitmap.h" |
| |
| HASH_128 * Generate_Hash_x64_128(FT_Bitmap * bitmap, HASH_128 * murmur) |
| { |
| int seed = 99; // Dont change |
| |
| MurmurHash3_x64_128(bitmap->buffer, (bitmap->pitch * bitmap->rows), seed, murmur->hash); |
| |
| return murmur; |
| } |
| |
| HASH_128 * Generate_Hash_x86_128(FT_Bitmap * bitmap, HASH_128 * murmur) |
| { |
| int seed = 99; // Dont change |
| |
| MurmurHash3_x86_128(bitmap->buffer, (bitmap->pitch * bitmap->rows), seed, murmur->hash); |
| |
| return murmur; |
| } |
| |
| HASH_32 * Generate_Hash_x86_32(FT_Bitmap * bitmap, HASH_32 * murmur) |
| { |
| int seed = 99; // Dont change |
| |
| MurmurHash3_x86_32(bitmap->buffer, (bitmap->pitch * bitmap->rows), seed, murmur->hash); |
| |
| return murmur; |
| } |
| |
| int Get_Padding( FT_Bitmap* bitmap ){ |
| |
| int rem; |
| if (bitmap->pixel_mode == 6) |
| { |
| rem = ( 3 * bitmap->width ) % 4; |
| }else{ |
| rem = ( bitmap->width ) % 4; |
| } |
| |
| if (!rem ) |
| { |
| return rem; |
| } |
| return (4 - rem); |
| } |
| |
| int Get_Bits_Per_Pixel ( unsigned char PIXEL_MODE) { |
| if (PIXEL_MODE < 5) |
| { |
| return BITS_PER_PIXEL_GRAY; |
| }else{ |
| return BITS_PER_PIXEL_LCD; |
| } |
| } |
| |
| void Write_Bitmap_Header (FT_Bitmap * bitmap, char * fname ) { |
| |
| FILE *fp = fopen(fname,"w"); // Bitmap File |
| HEADER *header = ( HEADER* ) calloc( 1 , sizeof( HEADER )); |
| |
| unsigned char pixel_mode = ( bitmap->pixel_mode ); |
| FT_UInt image_width; |
| FT_UInt image_rows; |
| FT_UInt color_table_size = 0; |
| |
| switch(pixel_mode){ |
| |
| case 5 : image_width = bitmap->width / 3; // LCD |
| image_rows = bitmap->rows; |
| break; |
| |
| case 6 : image_width = bitmap->width; // LCD_V |
| image_rows = bitmap->rows / 3; |
| break; |
| |
| default : image_width = bitmap->width; // MONO and GRAY |
| image_rows = bitmap->rows; |
| color_table_size = 4* 256; |
| break; |
| } |
| |
| FT_Int image_size; |
| image_size = (image_rows * image_width ); |
| |
| header->file_header.type = 0x4D42; |
| header->file_header.file_size = sizeof(HEADER) + color_table_size + image_size; |
| header->file_header.file_offset = sizeof(HEADER) + color_table_size; |
| |
| header->info_header.info_header_size = sizeof(BMP_INFO_HEADER); |
| header->info_header.width = image_width ; |
| header->info_header.height = - image_rows; |
| header->info_header.planes = PLANES; |
| header->info_header.bits_per_pixel = Get_Bits_Per_Pixel( bitmap->pixel_mode ); |
| header->info_header.compression = COMPRESSION; |
| header->info_header.image_size = image_size; |
| header->info_header.y_pixels_per_meter = Y_PIXELS_PER_METER ; |
| header->info_header.x_pixels_per_meter = X_PIXELS_PER_METER ; |
| header->info_header.used_colors = USED_COLORS; |
| header->info_header.important_colors = IMPORTANT_COLORS; |
| |
| fwrite (header, 1, sizeof(HEADER),fp); |
| free(header); |
| fclose(fp); |
| } |
| |
| void Write_Bitmap_Data_LCD_RGB( FT_Bitmap * bitmap, char * fname ){ |
| |
| char value; |
| int i,j,k; |
| |
| FILE *fp = fopen(fname,"a"); |
| |
| for (i = 0; i < bitmap->rows ; ++i) |
| { |
| for ( j = 2; j < bitmap->width; j = j+3) |
| { |
| for ( k = 0; k < 3; ++k) |
| { |
| value = 0xff - bitmap->buffer[( i * bitmap->pitch) + j - k]; |
| fwrite (&value, 1, 1,fp); |
| } |
| } |
| for ( k = 0; k < Get_Padding(bitmap); ++k) |
| { |
| value = 0xff; |
| fwrite (&value, 1, 1,fp); |
| } |
| } |
| |
| fclose(fp); |
| } |
| |
| void Write_Bitmap_Data_LCD_BGR( FT_Bitmap * bitmap, char * fname ){ |
| |
| char value; |
| int i,j,k; |
| |
| FILE *fp = fopen(fname,"a"); |
| |
| for ( i = 0; i < bitmap->rows ; ++i) |
| { |
| for ( j = 0; j < bitmap->width; j++) |
| { |
| value = 0xff - bitmap->buffer[( i * bitmap->pitch) + j]; |
| fwrite (&value, 1, 1,fp); |
| } |
| for ( k = 0; k < Get_Padding(bitmap); ++k) |
| { |
| value = 0xff; |
| fwrite (&value, 1, 1,fp); |
| } |
| } |
| |
| fclose(fp); |
| } |
| |
| void Write_Bitmap_Data_LCD_V_BGR (FT_Bitmap * bitmap, char * fname) { |
| |
| FILE *fp = fopen(fname,"a"); |
| |
| int i,j,k,step; |
| char value; |
| step = 0; |
| |
| while ( step < bitmap->rows ){ |
| |
| for (i = 0; i < bitmap->width; i++) |
| { |
| for (j = step ; j < step + 3; ++j) |
| { |
| value = 0xff - bitmap->buffer[(j * bitmap->pitch) + i]; |
| fwrite (&value, 1, 1,fp); |
| } |
| } |
| for (k = 0; k < Get_Padding(bitmap); ++k) |
| { |
| value = 0xff; |
| fwrite (&value, 1, 1,fp); |
| } |
| step = step + 3; // Jumping 3 rows up |
| } |
| |
| fclose(fp); |
| } |
| |
| void Write_Bitmap_Data_LCD_V_RGB (FT_Bitmap * bitmap, char * fname) { |
| |
| FILE *fp = fopen(fname,"a"); |
| |
| int i,j,k,step; |
| char value; |
| step = 0; |
| |
| while ( step < bitmap->rows ){ |
| |
| for (i = 0; i < bitmap->width; i++) |
| { |
| for (j = step + 2 ; j >= step; --j) |
| { |
| value = 0xff - bitmap->buffer[(j * bitmap->pitch) + i]; |
| fwrite (&value, 1, 1,fp); |
| } |
| } |
| for (k = 0; k < Get_Padding(bitmap); ++k) |
| { |
| value = 0xff; |
| fwrite (&value, 1, 1,fp); |
| } |
| step = step + 3; // Jumping 3 rows up |
| } |
| |
| fclose(fp); |
| } |
| |
| void Write_Bitmap_Data_MONO (FT_Bitmap * bitmap, char * fname) { |
| |
| FILE *fp = fopen(fname,"a"); |
| |
| int i; |
| unsigned char value; |
| for ( i = 0; i < 256; ++i) |
| { |
| value = i; |
| fwrite (&value,1,1,fp); |
| fwrite (&value,1,1,fp); |
| fwrite (&value,1,1,fp); |
| value = 0; |
| fwrite (&value,1,1,fp); |
| } |
| |
| |
| for (int i = 0; i < bitmap->pitch * bitmap->rows; ++i) |
| { |
| if ( bitmap->buffer[i] != 0x00 ){ |
| value = 0x00; // remember taking reverse |
| fwrite (&value, 1, 1,fp); |
| }else{ |
| value = 0xff; |
| fwrite (&value, 1, 1,fp); |
| } |
| } |
| |
| fclose(fp); |
| } |
| |
| void Write_Bitmap_Data_GRAY(FT_Bitmap * bitmap, char * fname) { |
| |
| FILE *fp = fopen(fname,"a"); |
| int i; |
| |
| unsigned char value; |
| for ( i = 0; i < 256; ++i) |
| { |
| value = i; |
| fwrite (&value,1,1,fp); |
| fwrite (&value,1,1,fp); |
| fwrite (&value,1,1,fp); |
| value = 0; |
| fwrite (&value,1,1,fp); |
| } |
| |
| for (int i = 0; i < bitmap->pitch * bitmap->rows; ++i) |
| { |
| value = 255 - bitmap->buffer[i]; |
| fwrite(&value,1,1,fp); |
| } |
| |
| fclose(fp); |
| } |