Revision: 6525 http://sourceforge.net/p/jump-pilot/code/6525 Author: edso Date: 2020-09-23 16:20:40 +0000 (Wed, 23 Sep 2020) Log Message: ----------- sometimes the image to be rendered seems to be still grayscale which does not play well with drawing onto a rgb graphics. as a workaround we detect those cases and convert em to rgb. done.
Modified Paths: -------------- core/trunk/src/org/openjump/core/rasterimage/RasterImageRenderer.java Modified: core/trunk/src/org/openjump/core/rasterimage/RasterImageRenderer.java =================================================================== --- core/trunk/src/org/openjump/core/rasterimage/RasterImageRenderer.java 2020-09-23 16:16:34 UTC (rev 6524) +++ core/trunk/src/org/openjump/core/rasterimage/RasterImageRenderer.java 2020-09-23 16:20:40 UTC (rev 6525) @@ -12,10 +12,11 @@ import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.Rectangle; import java.awt.RenderingHints; +import java.awt.color.ColorSpace; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; +import java.awt.image.ColorConvertOp; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; @@ -92,7 +93,11 @@ if (!getRasterImageLayer().isVisible()) { return; } - + +// if (last_scale == panel.getViewport().getScale() && last_env == panel.getViewport().fullExtent()) { +// return; +// } + // while(!this.doneRendering) // Thread.sleep(50); @@ -180,7 +185,19 @@ g.setComposite(AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 1.0f - (float) getRasterImageLayer().getTransparencyLevel())); - g.drawImage(sourceImage, xOffset, yOffset, null); + // suboptimal but seemingly working, drawing grayscale images throws + // Array Index Out Of Bounds Exception because it tries to copy RGB values + // why?! don't ask me.. + BufferedImage outImage = sourceImage; + int cs_type = outImage.getColorModel().getColorSpace().getType(); + if (cs_type != ColorSpace.TYPE_RGB) { + // TODO: this is really slow, replace with something faster + ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); + ColorConvertOp op = new ColorConvertOp(cs, null); + outImage = op.filter(sourceImage, null); + } + + g.drawImage(outImage, xOffset, yOffset, null); if (oldRenderingKey!=null) g.setRenderingHint(RenderingHints.KEY_RENDERING, oldRenderingKey); @@ -205,9 +222,8 @@ } }; - image.draw(drawer); - + doneRendering = true; } _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel