#include #include #include #include #include #include #include #include "murmur3.h" // MurmurHash3_x64_128 header file #include #include #include #include FT_FREETYPE_H #include FT_MODULE_H #include FT_LCD_FILTER_H #include FT_BITMAP_H #define BITS_PER_PIXEL_RGBA 32 #define MAX(a, b) ((a) > (b) ? (a) : (b)) typedef struct { // To store 32bit Hash FT_UInt32 hash; }HASH_32; typedef struct { // To store 128bit Hash FT_UInt32 hash[4]; }HASH_128; typedef struct { unsigned char red; unsigned char green; unsigned char blue; unsigned char alpha; } PIXEL; typedef struct { unsigned char red; unsigned char green; unsigned char blue; unsigned char alpha; } PIXEL_BGRA; /* A picture. */ typedef struct { PIXEL *pixels; size_t width; size_t height; } IMAGE; //------------------------------------------------------------------------------ HASH_32 * Generate_Hash_x86_32(FT_Bitmap * bitmap, HASH_32 * murmur); HASH_128 * Generate_Hash_x86_128(FT_Bitmap * bitmap, HASH_128 * murmur); HASH_128 * Generate_Hash_x64_128(FT_Bitmap * bitmap, HASH_128 * murmur); int Compare_Hash(HASH_128* hash_b, HASH_128* hash_t); //------------------------------------------------------------------------------ PIXEL * Pixel_At (IMAGE * bitmap, int x, int y); // Returns a pointer to pixel // at (x,y) co-ordinate // buffer to image void Make_PNG (FT_Bitmap* bitmap,IMAGE* fruit, int i,int render_mode); // Image to file int Generate_PNG (IMAGE *bitmap, const char *path,int render_mode); // Read PNG void Read_PNG(char *filename, IMAGE * after_effect); // Add an effect using two PNG images // Base Glyph = Gray {127,0,0,255} OR as it is // Differences = Red {255,0,0,255} // Effect_ID = {1 or 2} int Add_effect(IMAGE* base, IMAGE* test, IMAGE* out, int Effect_ID); // Stitch 2 PNG files void Stitch(IMAGE* left, IMAGE* right, IMAGE* result); // Make the Height of both the PNG(s) same by filling with white pixels void Print_Row( FILE* fp, int index, char* name, int diff, HASH_128* hash_b, HASH_128* hash_t); // Finding the first non-empty (non-white) column int First_Column(IMAGE* input); // Finding the first non-empty (non-white) row int First_Row(IMAGE* input); // Appening white columns with image alignment IMAGE* Append_Columns(IMAGE* small, IMAGE* big); // Appening white columns with image alignment IMAGE* Append_Rows(IMAGE* small, IMAGE* big);