Поскольку вы не указали ОС, я могу смело предположить, что это GNU/Linux.
В этом случае есть команда xrandr
с опцией --transform
.
Повеселись! (:
Со страницы xrandr
(посмотрите другие опции, например --out
):
--transform a,b,c,d,e,f,g,h,i
Определяет матрицу преобразования для применения на выходе. Автоматически выбирается билинейный фильтр. Математическая форма соответствует:
a b c
d e f
g h i
Преобразование основано на однородных координатах. Матрица, умноженная на вектор координат пикселя выходных данных, дает преобразованный вектор координат пикселя в графическом буфере. Точнее, вектор (xy) выходного пикселя расширяется до 3 значений (xyw), где 1 является координатой w, и умножается на матрицу. Окончательные координаты устройства пикселя затем вычисляются с помощью так называемого гомогенного деления на преобразованную w- координату. Другими словами, координаты устройства (x'y ') преобразованного пикселя:
x' = (ax + by + c) / w' and
y' = (dx + ey + f) / w' ,
with w' = (gx + hy + i) .
Как правило, a
и e
соответствуют масштабированию по осям X и Y, c
и f
соответствуют сдвигу по этим осям, а g
, h
и i
соответственно равны 0, 0 и 1. Матрица также может использоваться для выражения более сложных преобразований, таких как коррекция трапецеидальных искажений или поворот. Для поворота на угол T можно использовать эту формулу:
cos T -sin T 0
sin T cos T 0
0 0 1
В качестве специального аргумента вместо передачи матрицы можно передать строку none
, в этом случае используются значения по умолчанию (единичная матрица без фильтра).