@@ -1939,14 +1939,21 @@ 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+ ElementAtZoom <ImageData > closestAvailableImageData = getClosestAvailableImageData (zoom );
1950+ return DPIUtil .scaleImageData (device , closestAvailableImageData .element (), zoom , closestAvailableImageData .zoom ());
1951+ }
1952+
1953+ ElementAtZoom <ImageData > getClosestAvailableImageData (int zoom ) {
19471954 TreeSet <Integer > availableZooms = new TreeSet <>(zoomLevelToImageHandle .keySet ());
19481955 int closestZoom = Optional .ofNullable (availableZooms .higher (zoom )).orElse (availableZooms .lower (zoom ));
1949- return DPIUtil . scaleImageData ( device , getImageMetadata (new ZoomContext (closestZoom )).getImageData (), zoom , closestZoom );
1956+ return new ElementAtZoom <>( getImageMetadata (new ZoomContext (closestZoom )).getImageData (), closestZoom );
19501957 }
19511958
19521959 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
@@ -2004,12 +2011,16 @@ AbstractImageProviderWrapper createCopy(Image image) {
20042011 public Collection <Integer > getPreservedZoomLevels () {
20052012 return Collections .singleton (zoomForHandle );
20062013 }
2014+
2015+ @ Override
2016+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2017+ return getClosestAvailableImageData (zoom );
2018+ }
20072019}
20082020
20092021private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {
20102022 private final Map <Integer , ImageData > cachedImageData = new HashMap <>();
20112023
2012- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
20132024
20142025 void initImage () {
20152026 // As the init call configured some Image attributes (e.g. type)
@@ -2194,6 +2205,11 @@ ImageData newImageData(ZoomContext zoomContext) {
21942205 return getScaledImageData (targetZoom );
21952206 }
21962207
2208+ @ Override
2209+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2210+ return getClosestAvailableImageData (zoom );
2211+ }
2212+
21972213 @ Override
21982214 protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
21992215 int targetZoom = zoomContext .targetZoom ();
@@ -2326,7 +2342,6 @@ private ImageHandle initializeHandleFromSource(int zoom) {
23262342 return init (imageData , zoom );
23272343 }
23282344
2329- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
23302345
23312346 @ Override
23322347 protected Rectangle getBounds (int zoom ) {
@@ -2621,7 +2636,12 @@ protected long configureGCData(GCData data) {
26212636
26222637 @ Override
26232638 ImageData newImageData (ZoomContext zoomContext ) {
2624- return getImageMetadata (zoomContext ).getImageData ();
2639+ return loadImageData (zoomContext .targetZoom ).element ();
2640+ }
2641+
2642+ @ Override
2643+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2644+ return new ElementAtZoom <>(getImageMetadata (new ZoomContext (zoom )).getImageData (), zoom );
26252645 }
26262646
26272647 @ Override
0 commit comments