@@ -1939,14 +1939,20 @@ public Collection<Integer> getPreservedZoomLevels() {
19391939 return Collections .emptySet ();
19401940 }
19411941
1942+ protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
1943+
19421944 abstract ImageData newImageData (ZoomContext zoomContext );
19431945
19441946 abstract AbstractImageProviderWrapper createCopy (Image image );
19451947
19461948 ImageData getScaledImageData (int zoom ) {
1949+ return DPIUtil .scaleImageData (device , getClosestAvailableImageData (zoom ).element (), zoom , getClosestAvailableImageData (zoom ).zoom ());
1950+ }
1951+
1952+ ElementAtZoom <ImageData > getClosestAvailableImageData (int zoom ) {
19471953 TreeSet <Integer > availableZooms = new TreeSet <>(zoomLevelToImageHandle .keySet ());
19481954 int closestZoom = Optional .ofNullable (availableZooms .higher (zoom )).orElse (availableZooms .lower (zoom ));
1949- return DPIUtil . scaleImageData ( device , getImageMetadata (new ZoomContext (closestZoom )).getImageData (), zoom , closestZoom );
1955+ return new ElementAtZoom <>( getImageMetadata (new ZoomContext (closestZoom )).getImageData (), closestZoom );
19501956 }
19511957
19521958 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
@@ -2004,12 +2010,16 @@ AbstractImageProviderWrapper createCopy(Image image) {
20042010 public Collection <Integer > getPreservedZoomLevels () {
20052011 return Collections .singleton (zoomForHandle );
20062012 }
2013+
2014+ @ Override
2015+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2016+ return getClosestAvailableImageData (zoom );
2017+ }
20072018}
20082019
20092020private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {
20102021 private final Map <Integer , ImageData > cachedImageData = new HashMap <>();
20112022
2012- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
20132023
20142024 void initImage () {
20152025 // As the init call configured some Image attributes (e.g. type)
@@ -2194,6 +2204,11 @@ ImageData newImageData(ZoomContext zoomContext) {
21942204 return getScaledImageData (targetZoom );
21952205 }
21962206
2207+ @ Override
2208+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2209+ return getClosestAvailableImageData (zoom );
2210+ }
2211+
21972212 @ Override
21982213 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
21992214 int targetZoom = zoomContext .targetZoom ();
@@ -2326,7 +2341,6 @@ private ImageHandle initializeHandleFromSource(int zoom) {
23262341 return init (imageData , zoom );
23272342 }
23282343
2329- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
23302344
23312345 @ Override
23322346 protected Rectangle getBounds (int zoom ) {
@@ -2624,6 +2638,11 @@ ImageData newImageData(ZoomContext zoomContext) {
26242638 return getImageMetadata (zoomContext ).getImageData ();
26252639 }
26262640
2641+ @ Override
2642+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2643+ return new ElementAtZoom <>(newImageData (new ZoomContext (zoom )), zoom );
2644+ }
2645+
26272646 @ Override
26282647 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
26292648 currentZoom = zoomContext ;
0 commit comments