Разбить изображение на области - C# (180501)
Формулировка задачи:
Имеется изображение (например 480x480 px). Нужно разбить все изображение на области(квадраты, к примеру 5x5 px).
Цвет каждой области берется исходя из значения центрального пикселя, например этот набор пикселей нужно перекрасить в
"0" цвет:
В итоге должна получиться сетка (допустим 480x480 px), где каждые 5x5px окрашиваются цветом центрального пикселя.
Пробовал сам, но не получилось, буду очень благодарен за помощь
11111
11111
11011
11111
11111
Bitmap image2 = new Bitmap(pictureBox1.Image); //реализация карты признаков int[,] arrR = new int[480,480]; int[,] arrG = new int[480,480]; int[,] arrB = new int[480,480]; for (int i = 0; i < image2.Width; i++) { for (int j = 0; j < image2.Height; j++) { arrR[i, j] = image2.GetPixel(i, j).R; arrG[i, j] = image2.GetPixel(i, j).G; arrB[i, j] = image2.GetPixel(i, j).B; } } for (int i = 0; i < image2.Width - 5; i++) { for (int j = 0; j < image2.Height - 5; j++) { int[,] arrRSum , arrGSum , arrBSum ; arrRSum = new int[image2.Width, image2.Height]; arrGSum = new int[image2.Width, image2.Height]; arrBSum = new int[image2.Width, image2.Height]; // int arrRSum = 0, arrGSum = 0, arrBSum = 0; int arrsrR = 0 , arrsrG = 0, arrsrB = 0; if (i == 0) { arrRSum[i, j] = arrR[i + 2, j + 2]; arrGSum[i, j] = arrG[i + 2, j + 2]; arrBSum[i, j] = arrB[i + 2, j + 2]; } if (i > 0) { arrRSum[i, j] = arrR[i + 5, j + 5]; arrGSum[i, j] = arrG[i + 5, j + 5]; arrBSum[i, j] = arrB[i + 5, j + 5]; } for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { arrsrR = arrRSum[x + i, y + j]; arrsrG = arrGSum[x + i, y + j]; arrsrB = arrBSum[x + i, y + j]; image2.SetPixel(i, j, Color.FromArgb(arrsrR, arrsrG, arrsrB)); } } } progressBar1.Increment(+100); } pictureBox2.Image = image2;
Решение задачи: «Разбить изображение на области»
textual
Листинг программы
void Main() { var image = new Bitmap(480, 480); var random = new Random(); for (int y = 0; y < image.Height; y++) { for (int x = 0; x < image.Width; x++) { Color color; switch (random.Next(3)) { case 0: color = Color.Red; break; case 1: color = Color.Green; break; default: color = Color.Blue; break; } image.SetPixel(x, y, color); } } Application.Run(new MainForm(image)); for (int x = 2; x < image.Width; x += 5) { for (int y = 2; y < image.Height; y += 5) { var color = image.GetPixel(x, y); for (int dx = -2; dx <= 2 && dx < image.Width; dx++) { for (int dy = -2; dy <= 2 && dy < image.Height; dy++) { image.SetPixel(x + dx, y + dy, color); } } } } Application.Run(new MainForm(image)); } class MainForm: Form { public MainForm(Bitmap image) { var pb = new PictureBox(); pb.SizeMode = PictureBoxSizeMode.AutoSize; pb.Image = image; Controls.Add(pb); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д