Как разрезать изображение на части C#

Всем привет. Возможно кому-нибудь поможет мое решение, как можно из jpeg файла разрезать на равный части все изображение и сохранить их.

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

 

Обновлено: 18.02.2021 — 16:35

1 комментарий

Оставить комментарий
  1. HBM-Heathcliff

    Твой код накладывает фрагменты друг на друга, из-за чего при работе с полупрозрачными изображениями получится каша.
    Чтобы этого избежать, можно сократить область видимости Graphics gr и объявлять Bitmap piece внутри вложенного цикла. Вот так будет выглядеть код с моими правками:

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    // Разделите файл.
    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);
    Rectangle dest_rect = new Rectangle(0, 0, wid, hgt);

    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++)
    {
    Bitmap piece = new Bitmap(wid, hgt);
    using (Graphics gr = Graphics.FromImage(piece))
    {
    // Скопируйте кусок изображения.
    gr.DrawImage(bm, dest_rect, source_rect, GraphicsUnit.Pixel);
    }

    // Сохраним вырезаную часть изображения.
    string filename = piece_name +
    row.ToString("00") +
    col.ToString("00") + ".jpg";
    piece.Save(filename, ImageFormat.Jpeg);

    // Переходим к следующему столбцу.
    source_rect.X += wid;
    }
    source_rect.Y += hgt;
    }
    MessageBox.Show("Создаем " + num_rows * num_cols + " фаил",
    "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

    // Загружаем растровое изображение, не блокируя сам файл.
    private Bitmap LoadUnlocked(string file_name)
    {
    using (Bitmap bm = new Bitmap(file_name))
    {
    return new Bitmap(bm);
    }
    }
    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.