Просмотр миниатюр в WinForms
В этом разделе
ThumbnailViewer - это WinForms-контрол, предназначенный для отображения миниатюр связанной коллекции изображений.
ThumbnailViewer может работать отдельно
- ThumbnailViewer создает собственную коллекцию изображений
- связанная коллекция изображений доступна с помощью свойства ImageViewerBase.Images
- навигация по коллекции изображений осуществляется с помощью свойства ImageViewerBase.FocusedIndex
- миниатюра добавляется/обновляется/удаляется, если изображение добавляется/обновляется/удаляется из связанной коллекции изображений
ThumbnailViewer может работать как "ведомый просмотрщик" другого
ImageViewer или
ThumbnailViewer
- связь между просмотрщиками может быть установлена с помощью свойства ImageViewerBase.MasterViewer подчиненного просмотрщика
- ведомый просмотрщик использует коллекцию изображений главного просмотрщика
- доступ к общей коллекции изображений можно получить с помощью свойства ImageViewerBase.Images главного или подчиненного просмотрщика
- навигация по коллекции изображений может осуществляться с помощью свойства ImageViewerBase.FocusedIndex главного или подчиненного просмотрщика
- Свойства ImageViewerBase.FocusedIndex главного и подчиненного просмотрщиков изменяются синхронно
- изображение добавляется/обновляется/удаляется в просмотрщике изображений, если изображение добавляется/обновляется/удаляется в связанной коллекции изображений
Вот C#/VB.NET код, который демонстрирует, как загрузить изображения в ImageViewer, связать ImageViewer с ThumbnailViewer-ом, инвертировать первое изображение в коллекции изображений - изображение в ImageViewer и миниатюра в ThumbnailViewer будут инвертированы:
imageViewer1.Images.Add("myimages.tif");
thumbnailViewer1.MasterViewer = imageViewer1;
imageViewer1.Images[0].Invert();
imageViewer1.Images.Add("myimages.tif")
thumbnailViewer1.MasterViewer = imageViewer1
imageViewer1.Images(0).Invert()
Размер миниатюры
Миниатюры имеют 2 размера:
- "физический размер" - размер растрового изображения, связанного с миниатюрой
- "видимый размер" - размер растрового изображения, связанного с миниатюрой, после масштабирования
"Физический размер" миниатюр можно задать с помощью свойства
ThumbnailViewer.ThumbnailSize. Минимальный "физический размер" миниатюры - 32x32 пикселя, максимальный "физический размер" миниатюры - 1024x1024 пикселей.
"Видимый размер" миниатюр можно установить с помощью свойства
ThumbnailViewer.ThumbnailScale. "Видимый размер" рассчитывается как произведение "физического размера" и коэффициента масштабирования.
Вот список коэффициентов масштабирования:
- Smallest - видимый размер составляет 0.5 от физического размера
- Small - видимый размер составляет 0.75 от физического размера. физический размер
- Normal - видимый размер равен физическому размеру
- Large - видимый размер составляет 1.5 от физического размера
2 блока памяти можно выделить для миниатюр:
Старые миниатюры будут уничтожены (используемая память будет освобождена) и созданы новые миниатюры (будет выделена новая "память для исходных миниатюр") когда свойство
ThumbnailViewer.ThumbnailSize будет изменено.
Существующие миниатюры масштабируются при изменении
ThumbnailViewer.ThumbnailScale, выделяется "память для масштабированных миниатюр", если
ThumbnailViewer.ThumbnailScale не равно "Normal".
Важно
: Не используйте миниатюры большого размера, если в этом нет необходимости.
Внешний вид миниатюры и подпись к миниатюре
Определение внешнего вида миниатюры с помощью свойств
Класс
ThumbnailAppearance позволяет определить внешний вид миниатюры (цвет фона, цвет границы, стиль границы и ширину границы миниатюры) с помощью свойств.
ThumbnailViewer имеет свойства, которые позволяют определить "стандартный" внешний вид миниатюр:
Также
ThumbnailViewer позволяет на лету устанавливать внешний вид миниатюры. Для этого необходимо подписаться на событие
ThumbnailViewer.ThumbnailAppearanceSelected и изменить внешний вид миниатюры в обработчике события.
Определение подписи к миниатюрам с помощью свойств
Класс
ThumbnailCaption позволяет определить заголовок миниатюры: формат заголовка или пользовательский текст, отступ, привязку, шрифт текста, цвет текста.
Вот C#/VB.NET код, который демонстрирует, как настроить заголовок миниатюры с помощью события
ThumbnailCaption.CaptionFormatted:
/// <summary>
/// Sets the custom thumbnail caption.
/// </summary>
/// <param name="thumbnailViewer">The thumbnail viewer.</param>
public static void SetCustomThumbnailCaption(Vintasoft.Imaging.UI.ThumbnailViewer thumbnailViewer)
{
thumbnailViewer.ThumbnailCaption.CaptionFormatted += ThumbnailCaption_CaptionFormatted;
thumbnailViewer.ThumbnailCaption.IsVisible = true;
}
/// <summary>
/// Handles the CaptionFormatted event of the ThumbnailCaption.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Vintasoft.Imaging.UI.ThumbnailCaptionFormattedEventArgs"/> instance containing the event data.</param>
private static void ThumbnailCaption_CaptionFormatted(object sender, Vintasoft.Imaging.UI.ThumbnailCaptionFormattedEventArgs e)
{
Vintasoft.Imaging.VintasoftImage image = e.Thumbnail.Source;
int imageIndex = e.ThumbnailViewer.Images.IndexOf(image);
if (e.ThumbnailViewer.SelectedIndices.Contains(imageIndex))
{
e.Caption = "Selected";
}
else
{
e.Caption = string.Format("{0}, page {1}", System.IO.Path.GetFileName(image.SourceInfo.Filename), image.SourceInfo.PageIndex + 1);
}
}
''' <summary>
''' Sets the custom thumbnail caption.
''' </summary>
''' <param name="thumbnailViewer">The thumbnail viewer.</param>
Public Shared Sub SetCustomThumbnailCaption(thumbnailViewer As Vintasoft.Imaging.UI.ThumbnailViewer)
AddHandler thumbnailViewer.ThumbnailCaption.CaptionFormatted, AddressOf ThumbnailCaption_CaptionFormatted
thumbnailViewer.ThumbnailCaption.IsVisible = True
End Sub
''' <summary>
''' Handles the CaptionFormatted event of the ThumbnailCaption.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="Vintasoft.Imaging.UI.ThumbnailCaptionFormattedEventArgs"/> instance containing the event data.</param>
Private Shared Sub ThumbnailCaption_CaptionFormatted(sender As Object, e As Vintasoft.Imaging.UI.ThumbnailCaptionFormattedEventArgs)
Dim image As Vintasoft.Imaging.VintasoftImage = e.Thumbnail.Source
Dim imageIndex As Integer = e.ThumbnailViewer.Images.IndexOf(image)
If e.ThumbnailViewer.SelectedIndices.Contains(imageIndex) Then
e.Caption = "Selected"
Else
e.Caption = String.Format("{0}, page {1}", System.IO.Path.GetFileName(image.SourceInfo.Filename), image.SourceInfo.PageIndex + 1)
End If
End Sub
Свойство
ThumbnailViewer.ThumbnailCaption позволяет получить или установить подпись к миниатюрам в просмотрщике миниатюр.
Рисование миниатюры в просмотрщике миниатюр.
Если вы не можете определить внешний вид миниатюры или подпись к миниатюре с помощью свойств, вы можете использовать низкоуровневую функциональность - события
ThumbnailViewer.ThumbnailPainting и
ThumbnailViewer.ThumbnailPainted, т. е. рисовать графику под миниатюрой в обработчике события
ThumbnailViewer.ThumbnailPainted и/или рисовать графику поверх миниатюры в обработчике события
ThumbnailViewer.ThumbnailPainted.
Примеры
Проекты 'Thumbnail Viewer Demo' и 'Simple Demos' показывают, как создавать просмотрщик миниатюр с настраиваемым внешним видом.
Всплывающая подсказка для миниатюр
ThumbnailViewer позволяет отображать всплывающую подсказку для миниатюр.
Подсказки могут генерироваться автоматически.
Также всплывающие подсказки можно указать вручную
События просмотрщика миниатюр
ThumbnailViewer может вызывать следующие события:
Рендеринг миниатюр
ThumbnailViewer может рендерить миниатюры в несколько потоков. Количество потоков рендеринга можно получить/установить с помощью свойства
ThumbnailViewer.ThumbnailRenderingThreadCount. По умолчанию
ThumbnailViewer рендерит миниатюры в одном потоке.
Все миниатюры генерируются по умолчанию. Свойство
ThumbnailViewer.GenerateOnlyVisibleThumbnails позволяет генерировать только видимые миниатюры, это может быть необходимо на медленных компьютерах.
Контекстные меню просмотрщика миниатюр
Свойство ThumbnailViewer.ContextMenuStrip позволяет установить контекстное меню, связанное с просмотрщиком миниатюр.
Свойство
ThumbnailViewer.ThumbnailContextMenuStrip позволяет установить контекстное меню, связанное с одной миниатюрой. Свойство
ThumbnailViewer.DisableThumbnailContextMenu позволяет отключить контекстное меню для одной миниатюры.
Горячие клавиши просмотрщика миниатюр
ThumbnailViewer имеет горячие клавиши:
- Ctrl+C - копирует изображение выбранной миниатюры в буфер обмена
- Ctrl+X - копирует изображение выбранной миниатюры в буфер обмена и удаляет изображение из связанной коллекции изображений.
- Ctrl+V - вставляет изображение из буфера обмена как изображение выбранной миниатюры
- Del - удаляет выбранные миниатюры и изображения из связанной коллекции изображений.
- Ctrl+A - выбирает все миниатюры.
Горячие клавиши можно включить/отключить с помощью свойств
ImageViewerBase.ShortcutCopy ,
ImageViewerBase.ShortcutCut,
ImageViewerBase.ShortcutInsert,
ImageViewerBase.ShortcutDelete,
ImageViewerBase.ShortcutSelectAll.
Поведение горячих клавиш можно переопределить с помощью методов
ImageViewerBase.DoCopy,
ImageViewerBase.DoCut,
ImageViewerBase.DoInsert,
ImageViewerBase.DoDelete,
ImageViewerBase.DoSelectAll.
Выбор нескольких миниатюр в просмотрщике миниатюр
ThumbnailViewer позволяет выбрать несколько миниатюр одновременно, индексы выбранных миниатюр можно получить с помощью свойства
ThumbnailViewer.SelectedIndices.
Свойство
ThumbnailViewer.SelectedIndices - это "снимок" коллекции индексов (только чтение) выделенных миниатюр. Если вы работаете с копией коллекции, то необходимо учитывать, что свойство
ThumbnailViewer.SelectedIndices может меняться в зависимости от действий пользователя и ваша копия может стать неактуальной.
Перетаскивание миниатюр в просмотрщике миниатюр
ThumbnailViewer позволяет перетаскивать миниатюры. Чтобы перетащить миниатюру, просто наведите на нее курсор, зажмите левую кнопку мыши и перетащите курсор в нужное положение. Процесс перетаскивания миниатюр изменяет их индексы в коллекции
ImageViewerBase.Images, а это означает, что индексы в коллекции
ThumbnailViewer.SelectedIndices также изменятся. Вот почему мы не рекомендуем использовать копию этой коллекции.
Функция перетаскивания может быть включена/отключена с помощью свойств ThumbnailViewer.AllowDrop или
ThumbnailViewer.AllowDrag.