Возможно ли создать круговое (или любое другое непрямоугольное) изображение?
Все изображения в форме диска, которые я вижу, действительно находятся в прямоугольной коробке и имеют прозрачные стороны (черные части на изображении ниже).
![disc-shaped image]()
Возможно ли иметь круговой холст? Или изображения всегда были прямоугольными в форме?
Если да, как?
Ответы
Ответ 1
Вы правы, что любая непрямоугольная графика действительно живет внутри ограничивающего прямоугольника, который выровнен с осями. Это было сделано так, потому что прямоугольники настолько просты в обращении. Весь экран сам по себе представляет собой прямоугольное расположение пикселей.
Определение того, находится ли точка внутри прямоугольника, довольно просто: если координата X лежит между заданной точкой Xmin и Xmax, а координата Y лежит между Ymin и Ymax, эта точка находится в прямоугольнике. И эти два теста независимы - значения Xmin и Xmax не зависят от значения Y и наоборот. Это проще, чем определить, находится ли точка внутри круга, треугольника или любой другой формы, где вам понадобятся операции, такие как умножение или большая таблица поиска.
И подумайте об основных операциях, которые происходят в системе окон. Сначала он должен отобразить полную картину на экране. Система внутренне имеет кучу перекрывающихся окон для представления, и для формирования изображения она должна решить, какой цвет должен иметь каждый отдельный пиксель на экране. Это проще всего с прямоугольниками. Система сканирует каждую строку и столбец и определяет самое верхнее окно, которое содержит заданную координату X, Y, используя тест простых оценок. Затем до этого окна выберите цвет для пикселя.
И наоборот, когда мышь нажата где-то на экране, система должна определить, какое окно или объект была нажата, а затем отправить сообщение клика. Это действительно та же проблема, которую легко справиться, пройдя по списку перекрывающихся объектов и проверив координаты указателя мыши на прямоугольные границы каждого из них.
Эти две основные операции могут быть легко выполнены в программном обеспечении или даже в специализированном оборудовании. Некоторый другой метод, не основанный на прямоугольниках, будет гораздо более полезен.
Ответ 2
Я никогда не сталкивался с форматом растровой графики, который хранил что-либо, кроме прямоугольного массива пикселей, или его сжатую версию. Чтобы сохранить произвольную форму, файл должен содержать спецификацию в той или иной форме формы, в которую будут заполнены пиксели в файле. Я вижу, как это можно сделать, но я никогда не видел этого.
Один способ будет очень простым:
- хранить прямоугольный массив из 0s и 1s, где 1s представляют пиксели, для которых файл содержит спецификацию;
- хранить пиксели сами по себе, по одному для каждого 1 в вышеупомянутом массиве.
Другой способ хранения:
- размеры (в пикселях) прямоугольной ограничивающей рамки изображения;
- позиция в разделе данных файла первого пикселя в каждой строке по прямоугольной ограничительной рамке;
- сами пиксели.
Сложно видеть убедительную причину для устранения осложнений, которые вызывает подобный подход.
Векторная графика, конечно же, это отличный чайник.
Ответ 3
Я знаю, что это не то, что вы имели в виду, но бесконечно много, бесконечно тонких, идеально расположенных прямоугольных изображений можно было бы объединить, чтобы создать любую произвольную, не прямоугольную форму.
См. http://meyerweb.com/eric/css/edge/raggedfloat/demo.html.
Конечно, в реальном мире вы должны быть ограничены высотой и шириной 1 px.
Ответ 4
Компьютерное программирование основано на матрице, которая имеет определенные строки и столбцы, которые тоже находятся под углом 90 градусов. Поэтому устройства производятся таким образом, чтобы запускать программу, поэтому экраны прямоугольные.