Hi,

as Potlatch2 provides the option to sharpen the image I thought this should be possible in JOSM as well.

Unfortunately my 5 minute hack is not working. First I thought it might be no BufferedImage, but it is one.

It throws an exception being unable to convolve the Image. It does not tell why it's unable. Javadoc also does not tell.

As I'm no expert in this area I hope someone more experienced with ConvolveOp can improve the imagery plugin.

Sharpening could be an option in the context menu.

This is the patch to reproduce as well as the exception text.


Index: src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java
===================================================================
--- src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java (revision 24542) +++ src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java (working copy)
@@ -15,7 +15,11 @@
 import java.awt.event.MouseEvent;
 import java.awt.font.TextAttribute;
 import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.BufferedImageOp;
+import java.awt.image.ConvolveOp;
 import java.awt.image.ImageObserver;
+import java.awt.image.Kernel;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -672,10 +676,21 @@
int img_x_end = img_x_offset + (int)(target.getWidth() * imageXScaling); int img_y_end = img_y_offset + (int)(target.getHeight() * imageYScaling);

+        boolean sharpen=true;
+        Image myImg;
+        if (sharpen && sourceImg instanceof BufferedImage) {
+ Kernel kernel = new Kernel(3, 3, new float[] { -1, -1, -1, -1, 9, -1, -1, -1, -1});
+               BufferedImageOp op = new ConvolveOp(kernel);
+               myImg = op.filter((BufferedImage)sourceImg, null);
+        } else {
+               myImg = sourceImg;
+               out("can not sharpen "+sourceImg.toString());
+        }
+
         if (debug) {
             out("drawing image into target rect: " + target);
         }
-        g.drawImage(sourceImg,
+        g.drawImage(myImg,
                         target.x, target.y,
                         target.x + target.width, target.y + target.height,
                         img_x_offset, img_y_offset,



java.awt.image.ImagingOpException: Unable to convolve src image
        at java.awt.image.ConvolveOp.filter(Unknown Source)
at org.openstreetmap.josm.plugins.imagery.tms.TMSLayer.drawImageInside(T
MSLayer.java:684)
at org.openstreetmap.josm.plugins.imagery.tms.TMSLayer.paintTileImages(T
MSLayer.java:735)
at org.openstreetmap.josm.plugins.imagery.tms.TMSLayer.paint(TMSLayer.ja
va:993)
        at org.openstreetmap.josm.gui.MapView.paint(MapView.java:516)
        at javax.swing.JComponent.paintChildren(Unknown Source)
        at javax.swing.JSplitPane.paintChildren(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JComponent.paintChildren(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown S
ource)
        at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
        at javax.swing.RepaintManager.paint(Unknown Source)
        at javax.swing.JComponent._paintImmediately(Unknown Source)
        at javax.swing.JComponent.paintImmediately(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknow
n Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

_______________________________________________
josm-dev mailing list
josm-dev@openstreetmap.org
http://lists.openstreetmap.org/listinfo/josm-dev

Reply via email to