Ignore:
Timestamp:
2021-04-11T11:29:10+02:00 (3 years ago)
Author:
simon04
Message:

fix #20659 - Add contrast/gamma/... on image viewer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java

    r17553 r17740  
    3232import org.openstreetmap.josm.data.preferences.BooleanProperty;
    3333import org.openstreetmap.josm.data.preferences.DoubleProperty;
     34import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings;
     35import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings.FilterChangeListener;
    3436import org.openstreetmap.josm.spi.preferences.Config;
    3537import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
     
    3739import org.openstreetmap.josm.tools.Destroyable;
    3840import org.openstreetmap.josm.tools.ExifReader;
     41import org.openstreetmap.josm.tools.ImageProcessor;
    3942import org.openstreetmap.josm.tools.ImageProvider;
    4043import org.openstreetmap.josm.tools.Logging;
     
    4548 * Offers basic mouse interaction (zoom, drag) and on-screen text.
    4649 */
    47 public class ImageDisplay extends JComponent implements Destroyable, PreferenceChangedListener {
     50public class ImageDisplay extends JComponent implements Destroyable, PreferenceChangedListener, FilterChangeListener {
    4851
    4952    /** The file that is currently displayed */
     
    5154
    5255    /** The image currently displayed */
    53     private transient Image image;
     56    private transient BufferedImage image;
     57
     58    /**
     59     * Process the image before it is being displayed
     60     */
     61    private final ImageProcessor imageProcessor;
    5462
    5563    /** The image currently displayed */
     
    295303        @Override
    296304        public void run() {
    297             Image img;
     305            BufferedImage img;
    298306            try {
    299307                img = ImageIO.read(file);
     
    690698     */
    691699    public ImageDisplay() {
     700        this(image -> image);
     701    }
     702
     703    public ImageDisplay(ImageProcessor imageProcessor) {
    692704        addMouseListener(imgMouseListener);
    693705        addMouseWheelListener(imgMouseListener);
     
    695707        Config.getPref().addPreferenceChangeListener(this);
    696708        preferenceChanged(null);
     709        this.imageProcessor = imageProcessor;
     710        if (imageProcessor instanceof ImageryFilterSettings) {
     711            ((ImageryFilterSettings) imageProcessor).addFilterChangeListener(this);
     712        }
    697713    }
    698714
     
    703719        removeMouseMotionListener(imgMouseListener);
    704720        Config.getPref().removePreferenceChangeListener(this);
     721        if (imageProcessor instanceof ImageryFilterSettings) {
     722            ((ImageryFilterSettings) imageProcessor).removeFilterChangeListener(this);
     723        }
    705724    }
    706725
     
    744763
    745764    @Override
     765    public void filterChanged() {
     766        repaint();
     767    }
     768
     769    @Override
    746770    public void paintComponent(Graphics g) {
    747771        ImageEntry entry;
    748         Image image;
     772        BufferedImage image;
    749773        VisRect visibleRect;
    750774        boolean errorLoading;
     
    818842                    r.x = r.y = 0;
    819843                }
     844            }
     845
     846            if (image != null) {
     847                image = imageProcessor.process(image);
    820848            }
    821849
Note: See TracChangeset for help on using the changeset viewer.