BOOL MyColorSpace::RgbtoLuv(BYTE* inDatas, int width, int height, MyLUV* luvbuff)
//将位图图像数据转换为LUV数据;
{
	if (NULL == luvbuff)
	{
		CString tempstr;
		tempstr.Format("传入内存未分配,在MyColorSpace::RgbtoLuv");
		AfxMessageBox(tempstr,NULL,MB_OK);
		return FALSE;		
	}

	int i,j;
	FLOAT r,g,b;
	unsigned long pos;

	for(i=0;i<height;i++)
	{
		for (j=0;j<width;j++)
		{
			pos = i*width+j;
			r = (FLOAT)( (FLOAT)inDatas[3*pos+2] / 255. );
			g = (FLOAT)( (FLOAT)inDatas[3*pos+1] / 255. );
			b = (FLOAT)( (FLOAT)inDatas[3*pos] / 255. );
			FLOAT x, y, z;
			Rgb2Xyz(r, g, b, x, y, z);

			FLOAT l, u, v;
			Xyz2Luv(x, y, z, l, u, v);
			luvbuff[pos].l = l;
			luvbuff[pos].u = u;
			luvbuff[pos].v = v;			
		}
	}
	return TRUE;
}
BOOL MyColorSpace::RgbtoXyz(BYTE* inDatas, int width, int height, FLOAT* xyzbuff)
//将位图图像数据转换为HSV数据;
{
	if (NULL == xyzbuff)
	{
		CString tempstr;
		tempstr.Format("传入内存未分配,在MyColorSpace::RGBtoHSV");
		AfxMessageBox(tempstr,NULL,MB_OK);
		return FALSE;		
	}

	int i, j;
	FLOAT r, g, b;
	FLOAT x, y, z;
	unsigned long pos;

	for(i=0;i<height;i++)
	{
		for (j=0;j<width;j++)
		{
			pos = (i*width+j) * 3;
			r = (FLOAT) ( (FLOAT)inDatas[pos+2] / 255. );
			g = (FLOAT) ( (FLOAT)inDatas[pos+1] / 255. );
			b = (FLOAT) ( (FLOAT)inDatas[pos] / 255. );

			Rgb2Xyz(r, g, b, x, y, z);
			xyzbuff[pos] = x;
			xyzbuff[pos+1] = y;
			xyzbuff[pos+2] = z;			
		}
	}
	return TRUE;
}
Exemple #3
0
void Rgb2Cat02lms(num *L, num *M, num *S, num R, num G, num B)
{
	num X, Y, Z;
	Rgb2Xyz(&X, &Y, &Z, R, G, B);
	Xyz2Cat02lms(L, M, S, X, Y, Z);
}
Exemple #4
0
void Rgb2Lch(num *L, num *C, num *H, num R, num G, num B)
{
	num X, Y, Z;
	Rgb2Xyz(&X, &Y, &Z, R, G, B);
	Xyz2Lch(L, C, H, X, Y, Z);
}
Exemple #5
0
void Rgb2Luv(num *L, num *u, num *v, num R, num G, num B)
{
	num X, Y, Z;
	Rgb2Xyz(&X, &Y, &Z, R, G, B);
	Xyz2Luv(L, u, v, X, Y, Z);
}
Exemple #6
0
void Rgb2Lab(num *L, num *a, num *b, num R, num G, num B)
{
	num X, Y, Z;
	Rgb2Xyz(&X, &Y, &Z, R, G, B);
	Xyz2Lab(L, a, b, X, Y, Z);
}