Вращение и масштабирование массива 2D-пикселей
-
21-09-2019 - |
Вопрос
Я работаю над программой C# для обработки изображений (заданных как int[,])..
У меня есть двумерный массив пикселей, и мне нужно повернуть их вокруг точки, а затем уменьшить, чтобы они соответствовали исходному массиву.Я уже нашел статьи об использовании матрицы для преобразования в точку и поворота, а затем обратного преобразования.Осталось масштабировать полученное изображение так, чтобы оно соответствовало массиву исходного размера.
Как это можно сделать?(желательно с двумя уравнениями: одно для x и одно для y)
Решение
Взгляни здесь.Это должно дать вам всю математическую информацию о вращении координат.
Другие советы
Вам нужно найти преобразование результирующего массива в исходное изображение.Затем вы преобразуете точки в месте назначения в точки исходного изображения и копируете.Также возможен вариант сглаживания посредством передискретизации.Ваша матрица вращения также может применять масштабирование — просто умножьте матрицу на масштабный коэффициент (предполагается 2x2).Если вы используете матрицу 3x3 для вращения, масштабирования и перемещения, просто умножьте верхний левый угол 2x2 на масштабный коэффициент.
Наконец, рискуя проявить некоторую скромность, привожу ссылку на какой-то старый DOS-код TP6/asm, который я написал для полноэкранного ротационного масштабирования.Странные вещи, которые висят в сети:http://www.hornet.org/cgi-bin/scene-search.cgi?search=Paul%20H.%20Kahler
Все, что вам нужно сделать, можно сделать с помощью Bitmap
изображения в GDI+ (с помощью System.Drawing...
пространства имен).Эти классы разработаны и оптимизированы для выполнения именно таких задач (манипулирования изображениями).Есть ли какая-то конкретная причина, по которой вы не можете работать с реальным Bitmap
вместо int[,]
?Вы могли бы даже написать очень простую процедуру для создания Bitmap
из int[,]
, делайте все, что вам нужно, на Bitmap
, а затем преобразовать его обратно в int[,]
в конце.