2016-07-28 60 views
1

我使用openseadragon来显示金字塔(DZI)。openseadragon:更新特定的瓦片

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

为了达到这个目的,我用空白图像(白色图像)初始化了DZI hirarcy。 然后,在建立高分辨率图像的过程中,我用新的图像(在服务器中)替换空白图像。

如何根据需要更新特定瓷砖?服务器可以向客户端发送有关“raedy”(包含实际图像)的图块的信息。

回答

0

你只是想从纯色淡入图像?您可以对图像不透明度进行动画处理以实现此效果,这样会更容易。

如果你真的想搞乱图像拼贴,有一种可能性是直接编辑它们......假设你使用的是画布渲染器(默认情况下除IE8以外),你可以访问各个拼贴,使用tile.cacheImageRecord.getRenderedContext()获取保存其数据的画布的上下文;那么你可以做任何你想做的事情。如果您正在考虑这一点,则可能需要在查看器上观看tile-loaded事件,以便您可以在需要时加载正在加载的传入切片。

+0

嗨,谢谢你的回答,但我并没有打算询问图像的淡化。我编辑了我的问题,现在有更多细节。 – mira

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); 

我没有测试的代码,但它应该工作...

其他的事情,你必须处理是浏览器想要缓存区块本身,因为当您尝试第二次加载区块时它是相同的图像。想必有些东西可以放在标题中告诉浏览器每次请求时都需要重新加载图像。