Общий алгоритм для копирования изображения в параллелограмм, масштабирования, сдвига и вращения по мере необходимости - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь скопировать растровое изображение в параллелограмм.Параллелограмм можно вращать, сдвигать и масштабировать.Я ищу общий алгоритм, который может справиться с этим.Любой язык программирования будет работать, я могу перевести его.

По сути, я пытаюсь клонировать следующий метод в управляемом коде.

System.Drawing.Graphics.DrawImage (Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr);

Я пытаюсь сделать мою библиотеку совместимой с Mono, но описанная выше перегрузка еще не реализована.

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Мы хотим преобразовать точку (пиксель) в евклидово двумерное пространство.Затем мы должны применить преобразование t:

pixelPos = (x, y)
transformedPixelPos = t(pixelPos)

Каждое линейное преобразование (вращение, сдвиг, масштабирование) может быть представлено матрицей 2x2 .

вращение

enter image description here

масштабирование

enter image description here

стрижка

enter image description here

1 голос
/ 23 марта 2011

Используйте Graphics.TranslateTransform и ScaleTransform, а также свойство Transform для достижения вашей цели. Здесь можно найти отличную справочную информацию .

...