int DLL_CALLCONV FIA_ReplaceColourPlanes (FIBITMAP **src, FIBITMAP *R, FIBITMAP *G, FIBITMAP *B) { if (FreeImage_HasPixels(R) && FIA_Is8Bit(R)) { if (*src==NULL) *src = FreeImage_Allocate (FreeImage_GetWidth(R), FreeImage_GetHeight(R), 24); FIA_SetGreyLevelPalette (R); FreeImage_SetChannel(*src, R, FICC_RED); } if (FreeImage_HasPixels(G) && FIA_Is8Bit(G)) { if (*src==NULL) *src = FreeImage_Allocate (FreeImage_GetWidth(G), FreeImage_GetHeight(G), 24); FIA_SetGreyLevelPalette (G); FreeImage_SetChannel(*src, G, FICC_GREEN); } if (FreeImage_HasPixels(B) && FIA_Is8Bit(B)) { if (*src==NULL) *src = FreeImage_Allocate (FreeImage_GetWidth(B), FreeImage_GetHeight(B), 24); FIA_SetGreyLevelPalette (B); FreeImage_SetChannel(*src, B, FICC_BLUE); } return FIA_SUCCESS; }
int DLL_CALLCONV FIA_ReplaceColourPlanesHSV (FIBITMAP **src, FIBITMAP *H, FIBITMAP *S, FIBITMAP *V) { // HSV source images must all be the same size FIBITMAP *R=NULL, *G=NULL, *B=NULL; int x, y; double h, s, v; // Check we have valid images if (!FreeImage_HasPixels(H) || !FIA_Is8Bit(H) || !FreeImage_HasPixels(S) || !FIA_Is8Bit(S) || !FreeImage_HasPixels(V) || !FIA_Is8Bit(V)) { return FIA_ERROR; } // alloc RGB to something the same size as the source images R = FreeImage_Clone(H); G = FreeImage_Clone(H); B = FreeImage_Clone(H); // Convert the HSV values to RGB and store for(y = 0; y < FreeImage_GetHeight(H); y++) { BYTE *src_h = FreeImage_GetScanLine(H, y); BYTE *src_s = FreeImage_GetScanLine(S, y); BYTE *src_v = FreeImage_GetScanLine(V, y); BYTE *dst_r = FreeImage_GetScanLine(R, y); BYTE *dst_g = FreeImage_GetScanLine(G, y); BYTE *dst_b = FreeImage_GetScanLine(B, y); for(x = 0; x < FreeImage_GetWidth(H); x++) { // Red, Green and Blue are between 0 and 255 // Hue varies between 0 and 360 // Satuation between 0 and 1 // Value between 0 and 1 h = ((double)(*src_h))/255.0 * 360.0; s = ((double)(*src_s))/255.0; v = ((double)(*src_v))/255.0; FIA_HSVToRGB (h, s, v, dst_r, dst_g, dst_b); // jump to next pixel src_h ++; src_s ++; src_v ++; dst_r ++; dst_g ++; dst_b ++; } } FIA_ReplaceColourPlanes (src, R, G, B); FreeImage_Unload(R); FreeImage_Unload(G); FreeImage_Unload(B); return FIA_SUCCESS; }