Трансформация объектов структуры Drawing.Point
Существует некоторый кустарный "фотошоп", написан методами ООП. В этом неладном графическом редакторе существует фильтр, который делает из одной картинки 4, отражённых друг от друга.

Фильтр, казлось бы, выполняет всё, что от него просят, однако появилась необходимость сделать итоговое изображение в 2 раза шире и в 2 раза выше исходного. Выглядит логика фильтра следующим образом.
int x = point.X;
int y = point.Y;
if (x < size.Width / 2)
x = x * 2;
else
x = (size.Width - x - 1) * 2;
if (y < size.Height / 2)
y = y * 2;
else
y = (size.Height - y - 1) * 2;
return new Point(x, y);
Попытка в лоб удвоить значения Высоты и Ширины проваливается, т.к. каждый пиксель изображения считается и заносится в массив, который, соответственно, ругается когда значения первышают его изначальный размер. Как поступить в таком случае, если сам массив изменять нельзя.
public class Photo
{
public int Width
{
get { return data.GetLength(0); }
}
public int Height
{
get { return data.GetLength(1); }
}
private Pixel[,] data;
public Photo(int width, int height)
{
data = new Pixel[
CheckSize(width, "ширина"),
CheckSize(height, "высота")
];
}
public Pixel this[int x, int y]
{
get { return data[x, y]; }
set { data[x, y] = value; }
}
private int CheckSize(int val, string name)
{
if (val <= 0)
throw new Exception($"Неверная {name} {val}. Размер должен быть положительный");
return val;
}
}
Ответы (1 шт):
Алгоритм следующий:
- создать новый битмап с размерами в 2 раза больше исходного изображения
- скопировать исходное изображение в писксель 0,0
- отзеркалить изображение и скопировать в позицию 0,%ширина исходного изображения +1%
- // сделать идентичный процесс еще 2 раза для получения нижнего отзеркаливания
- присвоить в изображение твоего редактора получившийся битмап