2016-07-28 4 views
1

Я использую openseadragon для отображения пирамиды (DZI).openseadragon: обновить определенные плитки

Изображение с высоким разрешением построено во время выполнения, и я хочу, чтобы средство просмотра OSD обновлялось во время процесса построения изображения привет-res.

Для этого я инициализирую hirarcy DZI пустыми изображениями (белое изображение). Затем, во время создания изображения привет-res, я заменяю пустые изображения новыми (на сервере).

Как я могу обновить определенные плитки по запросу? Сервер может отправить обратно клиенту информацию о плитах, которые «злобны» (содержит реальное изображение).

ответ

0

Вы хотите просто похудеть от сплошного цвета к изображению? Вы можете анимировать непрозрачность изображения для достижения этого эффекта, и это было бы проще.

Если вы действительно хотите испортить графические плитки, одна из возможностей заключается в том, чтобы редактировать их напрямую ... при условии, что вы используете средство рендеринга canvas (которое используется по умолчанию, кроме 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); 

Я не проверял этот код, но он должен работать ...

Другая вещь, которую вы будете иметь дело с это браузер, который хочет кэшировать сам фрагмент, потому что это тот же образ, когда вы пытаетесь загрузить его во второй раз. По-видимому, есть что-то, что вы можете поместить в заголовки, чтобы сообщить браузеру, что ему нужно перезагружать изображение каждый раз, когда он просит его.

Смежные вопросы