Умножить элемент в многомерном массиве

#c# #arrays #algorithm #function #image-processing

Вопрос:

-> Пожалуйста, помогите с реализацией функции

По сути, я хочу манипулировать изображением

Представьте, что изображение можно разделить на пиксели -> каждый пиксель изображения будет (для простого примера) «числом»

         int[,] originalImage = new int[,]
        {
            { 1,2,3 },
            { 4,5,6 }
        };
 

И мне нужно удвоить размер изображения x2 (или x3, x4 и т. Д.).
Пиксель «1» При удвоении размера будет скопирован в правой позиции, вниз и в угол

             int[,] expectedResult = new int[,]
        {
            { 1,1,2,2,3,3 },
            { 1,1,2,2,3,3 },
            { 4,4,5,5,6,6 },
            { 4,4,5,5,6,6 }
        };
 

Как функция может быть реализована?

 Multiply(int[,] originalImage, int multiply)
 

Комментарии:

1. Хотя вы могли бы написать какой-нибудь сложный метод для этого, лучшим подходом было бы использовать существующую библиотеку, которая уже обладает этой функциональностью. Взгляните на некоторые из этих библиотек. devblogs.microsoft.com/dotnet/net-core-image-processing

Ответ №1:

Обратите внимание, что существует множество библиотек, которые могли бы сделать это в математике или обработке изображений. Однако, чисто для академических целей

Учитывая

 private static int[,] DoStuff(int[,] array,int size)
{
   var sizeX = array.GetLength(0);
   var sizeY = array.GetLength(1);

   var newArray = new int[sizeX * size, sizeY * size];

   for (var i = 0; i < newArray.GetLength(0); i  )
   for (var j = 0; j < newArray.GetLength(1); j  )
      newArray[i, j] = array[i / size, j / size];

   return newArray;
}
 

Использование

 int[,] originalImage = 
{
   { 1, 2, 3 },
   { 4, 5, 6 }
};

var newArray = DoStuff(originalImage,3);

for (var i = 0; i < newArray.GetLength(0); i  )
{
   for (var j = 0; j < newArray.GetLength(1); j  )
      Console.Write(newArray[i, j]   " ");
   Console.WriteLine();
}
 

Вывод

 1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6