Возможно ли создать круговое (или любое другое непрямоугольное) изображение?

Все изображения в форме диска, которые я вижу, действительно находятся в прямоугольной коробке и имеют прозрачные стороны (черные части на изображении ниже).

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 градусов. Поэтому устройства производятся таким образом, чтобы запускать программу, поэтому экраны прямоугольные.