BOOL MyColorSpace::XyztoRgb(FLOAT* xyzDatas, int width, int height, BYTE* rgbDatas) { if (NULL == rgbDatas) { 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; x = xyzDatas[pos]; y = xyzDatas[pos+1]; z = xyzDatas[pos+2]; Xyz2Rgb(x, y, z, r, g, b); rgbDatas[pos] = (BYTE) ( b*255 ); rgbDatas[pos+1] = (BYTE) ( g*255 ); rgbDatas[pos+2] = (BYTE) ( r*255 ); } } return TRUE; }
void Cat02lms2Rgb(num *R, num *G, num *B, num L, num M, num S) { num X, Y, Z; Cat02lms2Xyz(&X, &Y, &Z, L, M, S); Xyz2Rgb(R, G, B, X, Y, Z); }
void Luv2Rgb(num *R, num *G, num *B, num L, num u, num v) { num X, Y, Z; Luv2Xyz(&X, &Y, &Z, L, u, v); Xyz2Rgb(R, G, B, X, Y, Z); }
void Lch2Rgb(num *R, num *G, num *B, num L, num C, num H) { num X, Y, Z; Lch2Xyz(&X, &Y, &Z, L, C, H); Xyz2Rgb(R, G, B, X, Y, Z); }
void Lab2Rgb(num *R, num *G, num *B, num L, num a, num b) { num X, Y, Z; Lab2Xyz(&X, &Y, &Z, L, a, b); Xyz2Rgb(R, G, B, X, Y, Z); }