BOOL MyColorSpace::RgbtoHsv(BYTE* inDatas, int width, int height, MyHSV* outHSV) //将位图图像数据转换为HSV数据; { if (NULL == outHSV) { CString tempstr; tempstr.Format("传入内存未分配,在MyColorSpace::RGBtoHSV"); 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 h, s, v; Rgb2Hsv(r, g, b, h, s, v); outHSV[pos].h = h; outHSV[pos].s = s; outHSV[pos].v = v; } } return TRUE; }
uint8_t SysColor2Hsv(fb_pixel_t color, HsvColor *hsv) { uint8_t tr; RgbColor rgb; tr = (uint8_t)((color & 0xFF000000) >> 24); rgb.r = (uint8_t)((color & 0x00FF0000) >> 16); rgb.g = (uint8_t)((color & 0x0000FF00) >> 8); rgb.b = (uint8_t) (color & 0x000000FF); Rgb2Hsv(&rgb, hsv); return tr; }