---------------------------------------------------------------------------* * Colorspace conversion between RGB and HSB * *---------------------------------------------------------------------------*/ ! * \brief pixConvertRGBToHSV() * * \param[in] pixd can be NULL; if not NULL, must == pixs * \param[in] pixs * \return pixd always * * * Note
| 131 | * </pre> |
| 132 | */ |
| 133 | PIX * |
| 134 | pixConvertRGBToHSV(PIX *pixd, |
| 135 | PIX *pixs) |
| 136 | { |
| 137 | l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; |
| 138 | l_uint32 *line, *data; |
| 139 | PIXCMAP *cmap; |
| 140 | |
| 141 | PROCNAME("pixConvertRGBToHSV"); |
| 142 | |
| 143 | if (!pixs) |
| 144 | return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); |
| 145 | if (pixd && pixd != pixs) |
| 146 | return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); |
| 147 | |
| 148 | d = pixGetDepth(pixs); |
| 149 | cmap = pixGetColormap(pixs); |
| 150 | if (!cmap && d != 32) |
| 151 | return (PIX *)ERROR_PTR("not cmapped or rgb", procName, pixd); |
| 152 | |
| 153 | if (!pixd) |
| 154 | pixd = pixCopy(NULL, pixs); |
| 155 | |
| 156 | cmap = pixGetColormap(pixd); |
| 157 | if (cmap) { /* just convert the colormap */ |
| 158 | pixcmapConvertRGBToHSV(cmap); |
| 159 | return pixd; |
| 160 | } |
| 161 | |
| 162 | /* Convert RGB image */ |
| 163 | pixGetDimensions(pixd, &w, &h, NULL); |
| 164 | wpl = pixGetWpl(pixd); |
| 165 | data = pixGetData(pixd); |
| 166 | for (i = 0; i < h; i++) { |
| 167 | line = data + i * wpl; |
| 168 | for (j = 0; j < w; j++) { |
| 169 | extractRGBValues(line[j], &rval, &gval, &bval); |
| 170 | convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); |
| 171 | line[j] = (hval << 24) | (sval << 16) | (vval << 8); |
| 172 | } |
| 173 | } |
| 174 | |
| 175 | return pixd; |
| 176 | } |
| 177 | |
| 178 | |
| 179 | /*! |
no test coverage detected