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

Reply via email to