Алгоритм наложения двух массивов - C#

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

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

Звучит название темы странно, но вот в чём дело: есть 2 двумерных массива, (скажем каждый имеет ширину и высоту). Так же имеется сдвиг второго массива по "Х" и "Y". Для визуального восприятия допустим, что чёрная сетка на картинке - первый двумерный массив, розовая - 2й двумерный массив, сдвинутый на вышеупомянутые X и Y, зелёная - их пересечение. Задача такова: заменить все данные массива 1 на данные массива 2 в месте их пересечения (т.е. там, где зелёный цвет), цикл должен быть исключительно по зелёной области для максимального быстродействия (массивы не маленькие, как минимум 1000х1000). Ах да, X и Y могут быть меньше нуля (сдвиг будет идти влево или вверх).

Решение задачи: «Алгоритм наложения двух массивов»

textual
Листинг программы
        public static int LimitInt(int value, int min, int max) //обмежує число з 2х боків
        {
            if (value < min) value = min;
            if (value > max) value = max;
            return value;
        }
 
        public static IMAGEp MixImages2(IMAGEp static_image, IMAGEp second, int posX, int posY, byte alpha)
        {
            IMAGEp TR = static_image;
 
            int i,j;
            for (i = LimitInt(posX, 0, static_image.IMAGE.GetLength(0)); i < LimitInt(posX + second.IMAGE.GetLength(0), 0, static_image.IMAGE.GetLength(0)); i++)
            {
                for (j = LimitInt(posY, 0, static_image.IMAGE.GetLength(1)); j < LimitInt(posY + second.IMAGE.GetLength(1), 0, static_image.IMAGE.GetLength(1)); j++)
                {
                    TR.IMAGE[i, j] = MixColors(static_image.IMAGE[i, j], second.IMAGE[i - posX, j - posY], alpha);
                }
            }
 
            return TR;
        }
    }

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


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

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

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