Алгоритм наложения двух массивов - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д