Fix getLevelScale to use image dimensions

This commit is contained in:
Sanghoon Kim 2021-11-09 21:53:03 +09:00
parent fcca75c57e
commit 63a4f87716
2 changed files with 30 additions and 3 deletions

View File

@ -284,10 +284,14 @@ $.TileSource.prototype = {
// see https://github.com/openseadragon/openseadragon/issues/22
// we use the tilesources implementation of getLevelScale to generate
// a memoized re-implementation
var levelScaleCache = {},
var maxLevel = Math.ceil(
Math.log( Math.max( this.dimensions.x, this.dimensions.y ) ) /
Math.log( 2 )
),
levelScaleCache = {},
i;
for( i = 0; i <= this.maxLevel; i++ ){
levelScaleCache[ i ] = 1 / Math.pow(2, this.maxLevel - i);
for( i = 0; i <= maxLevel; i++ ){
levelScaleCache[ i ] = 1 / Math.pow(2, maxLevel - i);
}
this.getLevelScale = function( _level ){
return levelScaleCache[ _level ];

View File

@ -120,4 +120,27 @@
assertTileAtPoint(0, new OpenSeadragon.Point(1, 3033 / 2000), new OpenSeadragon.Point(0, 0));
});
QUnit.test('changing maxLevel', function(assert) {
var tileSource = new OpenSeadragon.TileSource({
width: 4096,
height: 4096,
});
assert.equal(tileSource.maxLevel, 12, 'The initial max level should be 12.');
tileSource.maxLevel = 9;
function assertLevelScale(level, expected) {
var actual = tileSource.getLevelScale(level);
assert.ok(Math.abs(actual - expected) < Number.EPSILON, "The scale at level " + level +
" should be " + expected.toString() +
" got " + actual.toString());
}
assertLevelScale(12, 1);
assertLevelScale(10, 1 / 4);
assertLevelScale(8, 1 / 16);
assertLevelScale(6, 1 / 64);
});
}());