(int red, int green, int blue, ColorModel cm)
| 179 | } |
| 180 | |
| 181 | public int pixelFromRGB(int red, int green, int blue, ColorModel cm) |
| 182 | { |
| 183 | if (trueColour) { |
| 184 | int r = (red * redMax + 32767) / 65535; |
| 185 | int g = (green * greenMax + 32767) / 65535; |
| 186 | int b = (blue * blueMax + 32767) / 65535; |
| 187 | |
| 188 | return (r << redShift) | (g << greenShift) | (b << blueShift); |
| 189 | } else if (cm != null) { |
| 190 | // Try to find the closest pixel by Cartesian distance |
| 191 | int colours = 1 << depth; |
| 192 | int diff = 256 * 256 * 4; |
| 193 | int col = 0; |
| 194 | for (int i=0; i<colours; i++) { |
| 195 | int r, g, b; |
| 196 | r = cm.getRed(i); |
| 197 | g = cm.getGreen(i); |
| 198 | b = cm.getBlue(i); |
| 199 | int rd = (r-red) >> 8; |
| 200 | int gd = (g-green) >> 8; |
| 201 | int bd = (b-blue) >> 8; |
| 202 | int d = rd*rd + gd*gd + bd*bd; |
| 203 | if (d < diff) { |
| 204 | col = i; |
| 205 | diff = d; |
| 206 | } |
| 207 | } |
| 208 | return col; |
| 209 | } |
| 210 | // XXX just return 0 for colour map? |
| 211 | return 0; |
| 212 | } |
| 213 | |
| 214 | // This method should be invoked with duplicates of dst/src Buffers |
| 215 | public void bufferFromRGB(ByteBuffer dst, ByteBuffer src, int pixels) |
no outgoing calls
no test coverage detected