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; }
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); }