@@ -1939,14 +1939,21 @@ public Collection<Integer> getPreservedZoomLevels() {
1939
1939
return Collections .emptySet ();
1940
1940
}
1941
1941
1942
+ protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
1943
+
1942
1944
abstract ImageData newImageData (ZoomContext zoomContext );
1943
1945
1944
1946
abstract AbstractImageProviderWrapper createCopy (Image image );
1945
1947
1946
1948
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 ) {
1947
1954
TreeSet <Integer > availableZooms = new TreeSet <>(zoomLevelToImageHandle .keySet ());
1948
1955
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 );
1950
1957
}
1951
1958
1952
1959
protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
@@ -2004,12 +2011,16 @@ AbstractImageProviderWrapper createCopy(Image image) {
2004
2011
public Collection <Integer > getPreservedZoomLevels () {
2005
2012
return Collections .singleton (zoomForHandle );
2006
2013
}
2014
+
2015
+ @ Override
2016
+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2017
+ return getClosestAvailableImageData (zoom );
2018
+ }
2007
2019
}
2008
2020
2009
2021
private abstract class ImageFromImageDataProviderWrapper extends AbstractImageProviderWrapper {
2010
2022
private final Map <Integer , ImageData > cachedImageData = new HashMap <>();
2011
2023
2012
- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
2013
2024
2014
2025
void initImage () {
2015
2026
// As the init call configured some Image attributes (e.g. type)
@@ -2194,6 +2205,11 @@ ImageData newImageData(ZoomContext zoomContext) {
2194
2205
return getScaledImageData (targetZoom );
2195
2206
}
2196
2207
2208
+ @ Override
2209
+ protected ElementAtZoom <ImageData > loadImageData (int zoom ) {
2210
+ return getClosestAvailableImageData (zoom );
2211
+ }
2212
+
2197
2213
@ Override
2198
2214
protected ImageHandle newImageHandle (ZoomContext zoomContext ) {
2199
2215
int targetZoom = zoomContext .targetZoom ();
@@ -2326,7 +2342,6 @@ private ImageHandle initializeHandleFromSource(int zoom) {
2326
2342
return init (imageData , zoom );
2327
2343
}
2328
2344
2329
- protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
2330
2345
2331
2346
@ Override
2332
2347
protected Rectangle getBounds (int zoom ) {
@@ -2621,7 +2636,12 @@ protected long configureGCData(GCData data) {
2621
2636
2622
2637
@ Override
2623
2638
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 );
2625
2645
}
2626
2646
2627
2647
@ Override
0 commit comments