Разбить изображение на области - C# (180501)

Узнай цену своей работы

Формулировка задачи:

Имеется изображение (например 480x480 px). Нужно разбить все изображение на области(квадраты, к примеру 5x5 px). Цвет каждой области берется исходя из значения центрального пикселя, например этот набор пикселей нужно перекрасить в "0" цвет:
11111 11111 11011 11111 11111
В итоге должна получиться сетка (допустим 480x480 px), где каждые 5x5px окрашиваются цветом центрального пикселя. Пробовал сам, но не получилось, буду очень благодарен за помощь
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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы