static void rgba_to_pala (Babl *conversion, char *src_i, char *dst, long n, void *dst_model_data) { const Babl *space = babl_conversion_get_destination_space (conversion); BablPalette **palptr = dst_model_data; BablPalette *pal; int best_idx = 0; assert (palptr); pal = *palptr; assert(pal); while (n--) { double *src_d = (void*) src_i; unsigned char src[4]; int c; for (c = 0; c < 3; c++) { if (src_d[c] >= 1.0f) src[c] = 255; else if (src_d[c] <= 0.0f) src[c] = 0; else src[c] = babl_trc_from_linear (space->space.trc[0], src_d[c]) * 255 + 0.5f; } if (src_d[3] >= 1.0f) src[3] = 255; else if (src_d[3] <= 0.0f) src[3] = 0; else src[3] = src_d[3] * 255 + 0.5f; best_idx = babl_palette_lookup (pal, src, best_idx); ((double *) dst)[0] = best_idx / BABL_IDX_FACTOR; ((double *) dst)[1] = src_d[3]; src_i += sizeof (double) * 4; dst += sizeof (double) * 2; } }
static void rgba_float_to_pal_a (Babl *conversion, unsigned char *src_b, unsigned char *dst, long n, void *src_model_data) { const Babl *space = babl_conversion_get_destination_space (conversion); BablPalette **palptr = src_model_data; BablPalette *pal; int best_idx = 0; assert (palptr); pal = *palptr; assert(pal); while (n--) { float *src_f = (void*) src_b; unsigned char src[4]; int c; for (c = 0; c < 3; c++) { if (src_f[c] >= 1.0f) src[c] = 255; else if (src_f[c] <= 0.0f) src[c] = 0; else src[c] = babl_trc_from_linear (space->space.trc[0], src_f[c]) * 255 + 0.5f; } if (src_f[3] >= 1.0f) src[3] = 255; else if (src_f[3] <= 0.0f) src[3] = 0; else src[3] = src_f[3] * 255 + 0.5f; dst[0] = best_idx = babl_palette_lookup (pal, src, best_idx); dst[1] = src[3]; src_b += sizeof (float) * 4; dst += sizeof (char) * 2; } }
static long rgba_u8_to_pal_a (char *src, char *dst, long n, void *src_model_data) { BablPalette **palptr = src_model_data; BablPalette *pal; assert (palptr); pal = *palptr; assert(pal); while (n--) { dst[0] = babl_palette_lookup (pal, src[0], src[1], src[2], src[3]); dst[1] = src[3]; src += sizeof (char) * 4; dst += sizeof (char) * 2; } return n; }
static void rgba_u8_to_pal_a (Babl *conversion, unsigned char *src, unsigned char *dst, long n, void *src_model_data) { BablPalette **palptr = src_model_data; BablPalette *pal; int best_idx = 0; assert (palptr); pal = *palptr; assert(pal); while (n--) { dst[0] = best_idx = babl_palette_lookup (pal, src, best_idx); dst[1] = src[3]; src += sizeof (char) * 4; dst += sizeof (char) * 2; } }