openseadragon:更新特定的图块

时间:2016-07-28 11:28:04

标签: openseadragon

我使用openseadragon来显示金字塔(DZI)。

高分辨率图像是在运行时构建的,我希望在高分辨率图像构建过程中更新OSD查看器。

为了实现这一点,我用空白图像(白色图像)初始化DZI hirarcy。 然后,在构建高分辨率图像期间,我用新的图像替换空白图像(在服务器中)。

我如何根据需要更新特定的图块?服务器可以向客户端发回有关" raedy" (包含真实图像)。

2 个答案:

答案 0 :(得分:1)

感谢您更新的问题! OSD无法定位特定磁贴以进行重置,但这可能是一个很好的功能。我想你可以在加载OSD之后加上这个:

OpenSeadragon.TileCache.prototype.clearTile = function( tile ) {
    OpenSeadragon.console.assert(tile, '[TileCache.clearTilesFor] tile is required');
    var tileRecord;
    for ( var i = 0; i < this._tilesLoaded.length; ++i ) {
        tileRecord = this._tilesLoaded[ i ];
        if ( tileRecord.tile === tile ) {
            this._unloadTile(tileRecord);
            this._tilesLoaded.splice( i, 1 );
            return;
        }
    }
};

...它应该添加该功能。然后,您可以找到有问题的磁贴并执行以下操作:

viewer.tileCache.clearTile(tile);

我还没有测试过这段代码,但它应该有用......

您必须处理的另一件事是浏览器想要缓存磁贴本身,因为当您尝试第二次加载时,它是相同的图像。据推测,您可以在标题中添加一些内容,告诉浏览器每次要求重新加载图像时都需要重新加载图像。

答案 1 :(得分:0)

您是否只想从纯色渐变到图像?您可以为图像不透明度设置动画以实现此效果,这样会更容易。

如果你真的想弄乱图像拼贴,一种可能就是直接编辑它们...假设你使用的是画布渲染器(除了在IE8上默认使用)你可以访问单个拼贴并使用tile.cacheImageRecord.getRenderedContext()获取保存其数据的画布的上下文;然后你可以做任何你想做的事情。如果您正在进行此操作,则可能需要在查看器上观看tile-loaded事件,以便在需要时可以编辑传入的图块。