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 события в средстве просмотра, так что вы можете редактировать входящие плитки по мере их загрузки, если это необходимо.

Другие вопросы по тегам