Глубокое увеличение – база данных Silverlight

ОГЛАВЛЕНИЕ

Статья описывает, как создать изображение с глубоким увеличением и сохранить мозаику в базе данных, и как прочитать изображение из базы данных и отобразить его в браузере.

•    Скачать исходники - 383.01 Кб

Введение

Данная статья показывает, как сохранить изображение с глубоким увеличением в базе данных, и как извлечь данные для отображения в приложении Silverlight. Для простоты используется база данных Microsoft Access, но код легко адаптируется к Microsoft SQL Server или Oracle. Требуется много усилий, чтобы заставить его работать. Статья рассматривает следующие основы:

•    Как создать изображение с глубоким увеличением из одного (большого) изображения. (Или, точнее, как создать мозаику, образующую изображение с глубоким увеличением.)
•    Как сохранить созданную мозаику в базе  данных.
•    Требуемая модель базы данных.
•    Как прочитать мозаику из базы данных и передать ее управляющему элементу MultiScaleImage.

Попутно вы узнаете другие полезные вещи, например, как хранить растровое изображение в базе данных Access, или как использовать LINQ для превращения DataSet в список объектов, являющийся источником данных для управляющего элемента Silverlight.

Предыстория

Бесконечное увеличение в Google Earth завораживает. В Silverlight есть прекрасная возможность глубокого увеличения. Однако неудобно использовать отдельный инструмент (формирователь глубокого увеличения) для создания такого изображения. Генерируемые им в системе файлы непрактичны, однако  он сойдет, если надо развернуть одно-два изображения с глубоким увеличением на веб-сайте. Но что делать, если надо создать тысячу таких изображений?

Компания под названием Скоуп Солюшенс находится в Базеле, Швейцария. Она создает программное обеспечение для "исторических" архивов, управляющее метаданными об архивном хранилище, содержащем изображения, карты и планы зданий. Конечно, архивы сканируют свои интересные документы, чтобы сделать их общедоступными. Архивист сканирует старую карту в максимально возможном качестве, чтобы иметь резервную копию, как можно более совпадающую с оригиналом ( что если  вдруг оригинал повредится/потеряется?). Это ведет к очень большим файлам и растровым изображениям. Например, растровое изображение с 13722 x 9737 пикселями – не редкость. Такое изображение занимает, в зависимости от формата, до 400 Мб на диске. Неудивительно, что некоторые архивы имеют коллекции  с десятками тысяч карт или с более чем 250 тысячами изображений.

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

Использование кода

Представленное здесь демо состоит из двух приложений:
•    Приложение форм Windows, генерирующее мозаику для изображения с глубоким увеличением и сохраняющее ее в базе  данных Microsoft Access.
•    Веб-приложение Silverlight, отображающее изображения из базы данных.

Оба приложения входят в одно и то же решение. Для компиляции и запуска решения потребуется VS 2008 SP 1 (требуется для разработки на Silverlight) с .NET 3.5. (для простоты оба приложения упакованы в одно решение). Поэтому вам придется поменять проект запуска в зависимости от того, какое приложение вы хотите запустить.

Важно: Прежде чем вы сможете запустить решение на своем компьютере, вы должны изменить строку подключения в конфигурации, чтобы она соответствовала вашему расположению пути. Строку подключения для приложения Windows Forms можно изменить в файле настроек. Строку подключения для приложения ASP.NET можно изменить в файле web.config. (Пустой) образец базы данных расположен в каталоге App_Data приложения ASP.NET.

Внутри решения есть 4 следующих проекта:
•    DatabaseDeepZoom: Простое приложение Windows Forms, предоставляющее пользовательский интерфейс для создания мозаики изображения с глубоким увеличением.
•    DbDzComposer: Эта библиотека используется обоими проектами и делает большую часть работы. Она содержит класс для генерации мозаики и класс для сохранения и извлечения данных из базы данных.
•    DeepZoomSilverlightProject: Приложение Silverlight, отображающее изображения. Этот стандартный проект вы получаете при использовании формирователя глубокого увеличения. К нему был добавлен список для отображения эскизов правее изображения с глубоким увеличением.
•    DeepZoomSilverlightWeb: Приложение ASP.NET, в котором размещается приложение Silverlight. Это расширенная версия стандартного проекта, создаваемого формирователем глубокого увеличения. Были добавлены два HttpHandler, возвращающих мозаику и эскизы, которые требует приложение Silverlight, и веб-служба WCF для возврата данных об изображениях.

В данной статье опущено большинство комментариев к коду. Код, который вы можете скачать, лучше документирован.