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