Разделить файлы изображений в C#

В этом примере показано, как можно разделить файлы изображений на более мелкие фрагменты.

Недавно мне нужны отдельные файлы растровых изображений для значков в панели инструментов Visual Studio. Я сделал снимок экрана, а затем, вместо того, чтобы разделить значки отдельно, я написал эту программу, чтобы сделать это. Следующий код выполняет большую часть работы.

// Разделить файл.
private void btnGo_Click(object sender, EventArgs e)
{
    // Получаем входные данные.
    int wid = int.Parse(txtWidth.Text);
    int hgt = int.Parse(txtHeight.Text);
    Bitmap bm = LoadUnlocked(txtFile.Text);

    // Начнем расщепление растрового изображения.
    string piece_name =
        Path.GetFileNameWithoutExtension(txtFile.Text);
    Bitmap piece = new Bitmap(wid, hgt);
    Rectangle dest_rect = new Rectangle(0, 0, wid, hgt);
    using (Graphics gr = Graphics.FromImage(piece))
    {
        int num_rows = bm.Height / hgt;
        int num_cols = bm.Width / wid;
        Rectangle source_rect = new Rectangle(0, 0, wid, hgt);
        for (int row = 0; row < num_rows; row++)
        {
            source_rect.X = 0;
            for (int col = 0; col < num_cols; col++)
            {
                // Скопируем фрагмент изображения.
                gr.DrawImage(bm, dest_rect, source_rect,
                    GraphicsUnit.Pixel);

                // Сохраним кусок.
                string filename = piece_name +
                    row.ToString("00") +
                    col.ToString("00") + ".bmp";
                piece.Save(filename, ImageFormat.Bmp);

                // Переместимся к следующему столбцу.
                source_rect.X += wid;
            }
            source_rect.Y += hgt;
        }
        MessageBox.Show(
            "Created " + num_rows * num_cols + " files",
            "Done", MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }
}
 // Разделить файл.
private void btnGo_Click (отправитель объекта, EventArgs e)
{
    // Получаем входные данные.
    int wid = int.Parse (txtWidth.Text);
    int hgt = int.Parse (txtHeight.Text);
    Bitmap bm = LoadUnlocked (txtFile.Text);

    // Начнем расщепление растрового изображения.
    string pieces_name =
        Path.GetFileNameWithoutExtension (txtFile.Text);
    Растровая фигура = новый битмап (wid, hgt);
    Rectangle dest_rect = новый прямоугольник (0, 0, wid, hgt);
    используя (Graphics gr = Graphics.FromImage (часть))
    {
        int num_rows = bm.Height / hgt;
        int num_cols = bm.Width / wid;
        Прямоугольник source_rect = новый прямоугольник (0, 0, wid, hgt);
        for (int row = 0; row & lt; num_rows; row ++)
        {
            source_rect.X = 0;
            for (int col = 0; col & lt; num_cols; col ++)
            {
                // Скопируем фрагмент изображения.
                gr.DrawImage (bm, dest_rect, source_rect,
                    GraphicsUnit.Pixel);

                // Сохраним кусок.
                string filename = шт_имя +
                    row.ToString ("00") +
                    col.ToString ("00") + ".bmp";
                piece.Save (filename, ImageFormat.Bmp);

                // Переместимся к следующему столбцу.
                source_rect.X + = wid;
            }
            source_rect.Y + = hgt;
        }
        MessageBox.Show (
            «Создано» + num_rows * num_cols + «файлы»,
            «Готово», MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }
}  

...

Далее код показывает, сколько строк и столбцов меньших изображений будет полностью помещено в исходное изображение и будет проходить через строки и столбцы.

Источник: http://csharphelper.com/blog/2016/06/split-image-files-in-c/

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