Глубокое увеличение – база данных Silverlight - Проекты DatabaseDeepZoom и DbDzComposer

ОГЛАВЛЕНИЕ

Проект DatabaseDeepZoom

Это простое приложение генерирует мозаику для изображения с глубоким увеличением. Пользователь указывает имя файла и имя для изображения. Код вызывает функцию GenerateFromFile из класса DeepZoomComposer, являющегося частью библиотеки DbDzComposer. Экземпляр класса DeepZoomGenerator создается по умолчанию с помощью конструктора, приказывающего классу создать элементы мозаики 256 x 256 пикселей и сохранить их как элементы мозаики с 24-разрядной глубиной представления цвета с качеством 90. Такое поведение можно изменить с помощью второго конструктора или путем установки свойств.

Наиболее важно то, что также создается экземпляр класса доступа к базе данных. Этот класс наследует интерфейс от абстрактного базового класса, определяющего стандартный интерфейс. С помощью данного интерфейса легко написать дополнительный поставщик, сохраняющий данные в базе данных Oracle или SQL Server, вместо используемого здесь класса Access.

public MainForm()
{
    InitializeComponent();

    dz = new DeepZoomGenerator {DatabasePersister = GetAccessDb()};
    dz.CreationProgress += dz_CreationProgress;
}

private DzDbAccess GetAccessDb()
{
    string connectString = Settings.Default.ConnectionString;
    var cn = new OleDbConnection(connectString);
    cn.Open();

    var accessPersistence = new DzDbAccess();
    accessPersistence.DbConnection = cn;
    return accessPersistence;
}

Остальной код занимается открытием файла изображения и другими связанными с пользовательским интерфейсом вещами, такими как индикаторы выполнения.

Проект DbDzComposer

Эта библиотека используется приложением Windows Forms и приложением ASP.NET. Она содержит классы для создания изображения с глубоким увеличением и класс для хранения сгенерированной мозаики в базе данных Microsoft Access. Класс DzDbAccess наследуется от абстрактного интерфейса, определяющего методы для сохранения и извлечения изображений из базы данных. Данный интерфейс был создан, чтобы можно было легко добавить другой поставщик сохранения в базу данных для другой системы баз данных. Как видно из кода, интерфейс весьма простой. Он предоставляет метод для сохранения данных об изображении и метод для сохранения отдельных элементов мозаики. Также он имеет методы для возврата списка с информацией об изображениях, хранящихся в базе данных, и методы для возврата просмотра эскиза и отдельных элементов мозаики вызывающей функции. И, конечно, ему нужно свойство с информацией о подключении к базе данных.

namespace DbDzComposer
{
    public abstract class IDzDbPersistance
    {
        public abstract int SaveImageInfo(string imageName, int width, int height,
            int tileSize, int overlap, string mimeType, Bitmap thumbnail);
        public abstract List<ImageInfo> GetImageInfo(Uri fromUri);
        public abstract void SaveImageTile(int imageId, int level, int x, int y,
            Bitmap bitmap);
        public abstract Bitmap GetImageTile(int imageId, int level, int x, int y);
        public abstract Bitmap GetThumbnail(int imageId);
        public abstract IDbConnection DbConnection { get; set; }
    }

    public class ImageInfo
    {
        public int ImageId { get; set; }
        public string ImageName { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public int TileSize { get; set; }
        public int Overlap { get; set; }
        public string MimeType { get; set; }
        public string ThumbnailUrl { get; set; }
    }
}

Класс для сохранения в конкретной базе данных используется классом DeepZoomGenerator для сохранения изображений. Этот класс DeepZoomGenerator основан на работе Беренда Энгелбрехта и является уменьшенной версией, так как задачей было создание мозаики только для отдельных изображений. Этот класс принимает большое изображение и создает мозаику, требуемую для создания изображения с глубоким увеличением. Однако он не поддерживает более продвинутые вещи, такие как коллекции изображений, предоставляемые технологией глубокого увеличения, и которые Беренд предоставил в своем оригинальном классе.