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