diff options
Diffstat (limited to 'java/awt/image/ColorModel.java')
-rw-r--r-- | java/awt/image/ColorModel.java | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/java/awt/image/ColorModel.java b/java/awt/image/ColorModel.java index fc413d0b4..ea3d1b64c 100644 --- a/java/awt/image/ColorModel.java +++ b/java/awt/image/ColorModel.java @@ -624,40 +624,36 @@ public abstract class ColorModel implements Transparency return cspace; } - // Typically overridden - public ColorModel coerceData(WritableRaster raster, - boolean isAlphaPremultiplied) - { - if (this.isAlphaPremultiplied == isAlphaPremultiplied || ! hasAlpha) - return this; + public abstract ColorModel coerceData(WritableRaster raster, + boolean isAlphaPremultiplied); + protected void coerceDataWorker(WritableRaster raster, + boolean isAlphaPremultiplied) + { int w = raster.getWidth(); int h = raster.getHeight(); int x = raster.getMinX(); int y = raster.getMinY(); - int size = w*h; + int size = w * h; int numColors = getNumColorComponents(); int numComponents = getNumComponents(); - int alphaScale = (1<<getComponentSize(numColors)) - 1; + int alphaScale = (1 << getComponentSize(numColors)) - 1; double[] pixels = raster.getPixels(x, y, w, h, (double[]) null); - for (int i=0; i<size; i++) + for (int i = 0; i < size; i++) { - double alpha = pixels[i*numComponents+numColors]*alphaScale; - for (int c=0; c<numColors; c++) - { - int offset = i*numComponents+c; - if (isAlphaPremultiplied) - pixels[offset] = pixels[offset]/alpha; - else - pixels[offset] = pixels[offset]*alpha; - } + double alpha = pixels[i * numComponents + numColors] / alphaScale; + for (int c = 0; c < numColors; c++) + { + int offset = i * numComponents + c; + if (isAlphaPremultiplied) + pixels[offset] = Math.round(pixels[offset] * alpha); + else + pixels[offset] = Math.round(pixels[offset] / alpha); + } } - - raster.setPixels(0, 0, w, h, pixels); - // FIXME: what can we return? - return null; + raster.setPixels(0, 0, w, h, pixels); } /** |