Разделить файлы изображений в 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);
}
}
...
Далее код показывает, сколько строк и столбцов меньших изображений будет полностью помещено в исходное изображение и будет проходить через строки и столбцы.
