コード例 #1
0
ファイル: pattern.c プロジェクト: JPisaBrony/HackISU
pixel_t get_color(array_t *image, size_t bitdepth)
{
	uint32_t pixel_num = 0;
	lab_pixel_t *avg = NULL;
	for (size_t i = 0; i < image->size; i++)
	{
		array_t *row = ((array_t *) image->ptr);
		for (size_t j = 0; j < row->size; j++)
		{
			pixel_num++;
			pixel_t rgb = ((pixel_t *) row->ptr)[j];
			xyz_pixel_t xyz = rgb_to_xyz(rgb);
			lab_pixel_t lab = xyz_to_lab(xyz);
			if (avg == NULL)
			{
				avg = malloc(sizeof(lab_pixel_t));
				*avg = lab;
			}
			else
			{
				avg->L = running_avg(avg->L, lab->L, pixel_num);
				avg->a = running_avg(avg->a, lab->a, pixel_num);
				avg->b = running_avg(avg->b, lab->b, pixel_num);
			}
		}
	}
	xyz_pixel_t xyz_avg = lab_to_xyz(*avg);
	return xyz_to_rgb(xyz_avg);
}
コード例 #2
0
		inline value_type lab_to_rgb(const value_type& v) {
			value_type lab = v - value_type(0,128,128);
			return xyz_to_rgb(lab_to_xyz(lab));
		}