Отображение миниатюры для файлов изображений в каталоге в C#

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

Эта программа на самом деле намного проще, чем вы думаете, потому что элементы управления выполняют всю работу по размещению изображений. Программа содержит (зеленый) FlowLayoutPanel с свойством AutoScroll, установленным на true. Программе нужно только отбросить на нее элементы управления PictureBox, и она автоматически упорядочивает их и при необходимости отображает полосы прокрутки.

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

//pictureBox, которые мы используем для отображения эскизов.
private List PictureBoxes = new List();

// Размеры эскизов.
private const int ThumbWidth = 100;
private const int ThumbHeight = 100;

// Отображение эскизов для выбранного каталога.
private void txtDirectory_TextChanged(object sender, EventArgs e)
{
    // Удалить старые PictureBoxes.
    foreach (PictureBox pic in PictureBoxes)
    {
        //pic.Click - = PictureBox_Click;
        pic.DoubleClick -= PictureBox_DoubleClick;
        pic.Dispose();
    }
    flpThumbnails.Controls.Clear();
    PictureBoxes = new List();

    // Если каталог не существует, ничего не делайте.
    if (!Directory.Exists(txtDirectory.Text)) return;

    // Получить имена файлов в каталоге.
    List filenames = new List();
    string[] patterns =
        { "*.png", "*.gif", "*.jpg", "*.bmp", "*.tif" };
    foreach (string pattern in patterns)
    {
        filenames.AddRange(Directory.GetFiles(txtDirectory.Text,
            pattern, SearchOption.TopDirectoryOnly));
    }
    filenames.Sort();

    // Загружаем файлы.
    foreach (string filename in filenames)
    {
        // Загрузите изображение в PictureBox.
        PictureBox pic = new PictureBox();

        pic.ClientSize = new Size(ThumbWidth, ThumbHeight);
        pic.Image = new Bitmap(filename);

        // Если изображение слишком велико, увеличьте масштаб.
        if ((pic.Image.Width > ThumbWidth) ||
            (pic.Image.Height > ThumbHeight))
        {
            pic.SizeMode = PictureBoxSizeMode.Zoom;
        }
        else
        {
            pic.SizeMode = PictureBoxSizeMode.CenterImage;
        }

        // Добавьте обработчик события DoubleClick.
        //pic.Click + = PictureBox_Click;
        pic.DoubleClick += PictureBox_DoubleClick;
        
        // Добавить всплывающую подсказку.
        FileInfo file_info = new FileInfo(filename);
        tipPicture.SetToolTip(pic, file_info.Name +
            "\nCreated: " +
            file_info.CreationTime.ToShortDateString() +
            "\n(" + pic.Image.Width + " x " +
            pic.Image.Height + ") " +
            ToFileSizeApi(file_info.Length));
        pic.Tag = file_info;

        // Добавьте PictureBox в FlowLayoutPanel.
        pic.Parent = flpThumbnails;
    }
}

Этот код определяет элементы управления PictureBox, которые он использует для отображения изображений. Он также определяет константы ThumbWidth и ThumbHeight, которые определяют размер эскиза.

txtDirectory_TextChanged выполняет большую часть работы. Сначала он удаляет обработчик события DoubleClick из любых существующих элементов управления PictureBox и удаляет их. Он удаляет все дочерние элементы управления из flpThumbnails FlowLayoutPanel и сбрасывает список PictureBoxes.

Далее код использует Directory.Exists, чтобы узнать, существует ли каталог, указанный в TextBox, и возвращается, если он этого не делает. Это происходит, например, если вы введете TextBox и не закончили вводить имя каталога.

Затем код перебирает массив шаблонов файлов, ищущих png, gif, jpg и другие форматы файлов изображений. Для каждого формата код использует метод Directory.GetFiles для поиска файлов, соответствующих шаблону. Этот метод возвращает массив имен файлов. В коде используется имя_файла list AddRange, чтобы добавить все файлы, найденные в списке. После поиска файлов, соответствующих всем шаблонам, программа сортирует список filenames.

Теперь программа перебирает имена файлов. Для каждого файла он создает PictureBox, устанавливает его размер в правый размер миниатюры и загружает соответствующий файл в свойство PictureBox элемента управления Изображение .

Затем, если изображение больше, чем PictureBox, программа устанавливает свойство PictureBox элемента управления SizeMode в Zoom, поэтому оно отображает его как насколько это возможно, без искажения. Если изображение меньше, чем PictureBox, программа устанавливает SizeMode в CenterImage, чтобы отобразить изображение в полном масштабе, центрированном в элементе управления.

Код устанавливает обработчик события PictureBox_DoubleClick (показано в скором времени), чтобы поймать событие DoubleClick элемента управления и добавляет всплывающую подсказку, описывающую изображение. Наконец, код устанавливает свойство PictureBox элемента управления Parent в FlowLayoutPanel, поэтому PictureBox отображается внутри FlowLayoutPanel .

В следующем коде показан обработчик событий PictureBox_DoubleClick, который выполняется при двойном щелчке PictureBox.

// Откройте файл.
private void PictureBox_DoubleClick(object sender, EventArgs e)
{
    // Получить информацию о файле.
    PictureBox pic = sender as PictureBox;
    FileInfo file_into = pic.Tag as FileInfo;

    // «Запустите» файл.
    Process.Start(file_into.FullName);
}
 // Откройте файл.
private void PictureBox_DoubleClick (отправитель объекта, EventArgs e)
{
     // Получить информацию о файле.
     PictureBox pic = отправитель как PictureBox;
     FileInfo file_into = pic.Tag как FileInfo;

     // «Запустите» файл.
     Process.Start (file_into.FullName);
}  

...

Источник: http://csharphelper.com/blog/2016/12/display-thumbnails-for-image-files-in-a-directory-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector