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