#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