Converting from BGRA to RGB

This commit is contained in:
Norbi Peti 2018-11-27 22:20:38 +01:00
parent 0a04568a2b
commit 7ed8cfd8d0
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56

View file

@ -13,21 +13,26 @@
//--------------------------------------------------------------------- //---------------------------------------------------------------------
typedef long long int addr; typedef long long int addr;
typedef struct { //RGB
int red : 8;
int green : 8;
int blue : 8;
} Color; //Used for Bukkit's initializers (for simplicity)
typedef struct { //BGRA typedef struct { //BGRA
int blue : 8; int blue : 8;
int green : 8; int green : 8;
int red : 8; int red : 8;
int alpha : 8; int alpha : 8;
} Color; } NativeColor; //Used for the screen data
char matchColor(Color* p); char matchColor(NativeColor* p);
void* image=NULL; void* image=NULL;
void* maps=NULL; //Per map data (1st map, second map etc.) void* maps=NULL; //Per map data (1st map, second map etc.)
short width, height, mapcx, mapcy; short width, height, mapcx, mapcy;
char* mapp=NULL; //Pointer inside the map char* mapp=NULL; //Pointer inside the map
Color* imgp=NULL; //Pointer inside the image NativeColor* imgp=NULL; //Pointer inside the image
void setSource(addr address, short w, short h, short mcx, short mcy) { void setSource(addr address, short w, short h, short mcx, short mcy) {
ct_assert(sizeof(char)==1); //Compile-time assert ct_assert(sizeof(char)==1); //Compile-time assert
@ -45,21 +50,21 @@ void* updateAndGetMap(int x, int y, int w, int h) { //TODO: Support the paramete
for(short i=0; i<MAPSIZE; i++) { //We need to jump for(short i=0; i<MAPSIZE; i++) { //We need to jump
for(short j=0; j<MAPSIZE; j++) { for(short j=0; j<MAPSIZE; j++) {
*mapp=matchColor(imgp); *mapp=matchColor(imgp);
imgp++; //Increment by the size of color so 4 imgp++; //Increment by the size of Nativecolor so 4
mapp++; mapp++;
} }
imgp+=width-MAPSIZE; //Go back to the first column imgp+=width-MAPSIZE; //Go back to the first column
} }
imgp+=MAPSIZE; //Go to the next map, kind of - TODO: Use X and Y coords! imgp+=MAPSIZE; //Go to the next map, kind of - TODO: Use X and Y coords!
if((void*)mapp - maps > MAPSIZE * MAPSIZE * mapcx * mapcy || if((void*)mapp - maps > MAPSIZE * MAPSIZE * mapcx * mapcy ||
(void*)imgp - image > width * height * sizeof(Color)) { (void*)imgp - image > width * height * sizeof(NativeColor)) {
mapp = maps; //Start over mapp = maps; //Start over
imgp = image; //Start over imgp = image; //Start over
} //TODO: This is only one map, do it for all of them } //TODO: This is only one map, do it for all of them
return retp; return retp;
} }
const Color colors[] = { //TODO: These should be in BGRA format, not RGB const Color colors[] = {
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
{89, 125, 39}, {109, 153, 48}, {127, 178, 56}, {67, 94, 29}, {89, 125, 39}, {109, 153, 48}, {127, 178, 56}, {67, 94, 29},
{174, 164, 115}, {213, 201, 140}, {247, 233, 163}, {130, 123, 86}, {174, 164, 115}, {213, 201, 140}, {247, 233, 163}, {130, 123, 86},
@ -128,9 +133,9 @@ double getDistance(Color c1, Color c2) {
} }
//Code from Bukkit's MapPalette class //Code from Bukkit's MapPalette class
char matchColor(Color* const p) { char matchColor(NativeColor* const p) {
Color color=*p; if (p->alpha < 128) return 0;
if (color.alpha < 128) return 0; Color color={.red=p->red, .green=p->green, .blue=p->blue};
char index = 0; char index = 0;
double best = -1; double best = -1;