openseadragon: обновить конкретные плитки
Я использую openseadragon для отображения пирамиды (DZI).
Изображение высокого разрешения создается во время выполнения, и я хочу, чтобы средство просмотра OSD обновлялось во время процесса создания изображения высокого разрешения.
Чтобы добиться этого, я инициализирую хамство DZI с пустыми изображениями (белое изображение). Затем при создании изображения высокого разрешения я заменяю пустые изображения новыми (на сервере).
Как я могу обновить конкретные плитки по требованию? Сервер может отправлять обратно клиенту информацию о плитках, которые являются "радужными" (содержит реальное изображение).
2 ответа
Спасибо за обновленный вопрос! 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);
Я не проверял этот код, но он должен работать...
Другая вещь, с которой вам придется иметь дело, это браузер, желающий кэшировать саму плитку, потому что это то же самое изображение, когда вы пытаетесь загрузить его во второй раз. Предположительно есть что-то, что вы можете вставить в заголовки, чтобы сообщить браузеру, что ему нужно перезагружать изображение каждый раз, когда он запрашивает его.
Вы просто хотите перейти от сплошного цвета к изображению? Вы можете анимировать непрозрачность изображения для достижения этого эффекта, и это будет проще.
Если вы действительно хотите возиться с плитками изображений, можно было бы отредактировать их напрямую... при условии, что вы используете визуализатор холста (который используется по умолчанию, кроме IE8), вы можете получить доступ к отдельным плиткам и использовать их. tile.cacheImageRecord.getRenderedContext()
получить контекст для холста, который содержит его данные; тогда вы можете делать с ней все, что захотите. Если вы попадаете в это, вы можете посмотреть tile-loaded
события в средстве просмотра, так что вы можете редактировать входящие плитки по мере их загрузки, если это необходимо.