static long conv_rgbafloat_linear_rgbu8_gamma (unsigned char *src_char, unsigned char *dst, long samples) { long n = samples; float *src = (float*)src_char; while (n--) { if (src[3] < BABL_ALPHA_THRESHOLD) { dst[0] = 0; dst[1] = 0; dst[2] = 0; } else { dst[0] = conv_float_u8_two_table_map (src[0]); dst[1] = conv_float_u8_two_table_map (src[1]); dst[2] = conv_float_u8_two_table_map (src[2]); } src += 4; dst += 3; } return samples; }
static long conv_rgbafloat_linear_rgbau8_gamma (unsigned char *src_char, unsigned char *dst, long samples) { long n = samples; float *src = (float*)src_char; while (n--) { if (src[3] <=0) { dst[0] = 0; dst[1] = 0; dst[2] = 0; dst[3] = 0; } else { dst[0] = conv_float_u8_two_table_map (src[0]); dst[1] = conv_float_u8_two_table_map (src[1]); dst[2] = conv_float_u8_two_table_map (src[2]); dst[3] = src[3] * 0xff + 0.5; } src += 4; dst += 4; } return samples; }
static long conv_rgbfloat_linear_cairo24_le (unsigned char *src_char, unsigned char *dst, long samples) { long n = samples; float *src = (float*)src_char; while (n--) { dst[0] = conv_float_u8_two_table_map (src[2]); dst[1] = conv_float_u8_two_table_map (src[1]); dst[2] = conv_float_u8_two_table_map (src[0]); src += 3; dst += 4; } return samples; }
static long conv_yfloat_linear_yu8_gamma (unsigned char *src_char, unsigned char *dst, long samples) { long n = samples; float *src = (float*)src_char; while (n--) { *dst++ = conv_float_u8_two_table_map (*src++); } return samples; }
static long conv_yafloat_linear_yau8_gamma (unsigned char *src_char, unsigned char *dst, long samples) { long n = samples; float *src = (float*)src_char; while (n--) { long int alpha; *dst++ = conv_float_u8_two_table_map (*src++); alpha = rint (*src++ * 255.0); *dst++ = (alpha < 0) ? 0 : ((alpha > 255) ? 255 : alpha); } return samples; }