Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 16995)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 16997)
@@ -1490,4 +1490,7 @@
             return null;
         }
+        if (resizeMode == ImageResizeMode.BOUNDED) {
+            resizeMode = ImageResizeMode.BOUNDED_UPSCALE;
+        }
         return resizeMode.createBufferedImage(dim, new Dimension((int) sourceWidth, (int) sourceHeight), g -> {
             try {
Index: trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java	(revision 16995)
+++ trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java	(revision 16997)
@@ -33,8 +33,17 @@
         @Override
         Dimension computeDimension(Dimension dim, Dimension icon) {
+            final int maxWidth = Math.min(dim.width, icon.width);
+            final int maxHeight = Math.min(dim.height, icon.height);
+            return BOUNDED_UPSCALE.computeDimension(new Dimension(maxWidth, maxHeight), icon);
+        }
+    },
+
+    BOUNDED_UPSCALE {
+        @Override
+        Dimension computeDimension(Dimension dim, Dimension icon) {
             CheckParameterUtil.ensureThat((dim.width > 0 || dim.width == -1) && (dim.height > 0 || dim.height == -1),
                     () -> dim + " is invalid");
-            final int maxWidth = Math.min(dim.width, icon.width);
-            final int maxHeight = Math.min(dim.height, icon.height);
+            final int maxWidth = dim.width;
+            final int maxHeight = dim.height;
             final Dimension spec;
             if (maxWidth == -1 || maxHeight == -1) {
