15

我看到的所有圆盘形图像实际上都在一个矩形框中,并且侧面(下图中的黑色部分)是透明的。

圆盘状图像

是否有可能有一个圆形画布本身?或者图像总是设计成矩形的?

如果是,如何?

4

5 回答 5

9

没错,任何非矩形图形都确实存在于与轴对齐的边界矩形内。这样做是因为矩形很容易处理。整个显示器本身只是像素的矩形排列。

确定一个点是否在矩形内非常容易:如果 X 坐标位于给定的 Xmin 和 Xmax 点之间,并且 Y 坐标位于 Ymin 和 Ymax 之间,则该点在矩形内。这两个测试是独立的——Xmin 和 Xmax 值不依赖于 Y 值,反之亦然。这比确定一个点是否位于圆形、三角形或任何其他形状内更容易,因为在这些形状中您需要乘法或大型查找表等操作。

并考虑在窗口系统中发生的基本操作。首先它必须在屏幕上渲染完整的图片。系统内部有一堆重叠的窗口来表示,为了形成画面,它必须决定屏幕上每个单独的像素需要是什么颜色。这对于矩形来说是最简单的。系统扫描每一行和每一列,并使用简单边界测试确定包含给定 X、Y 坐标的最上面的窗口。然后由该窗口选择像素的颜色。

相反,当鼠标点击屏幕某处时,系统必须确定点击了哪个窗口或对象,然后向其发送点击消息。这实际上是同一个问题,通过遍历重叠对象列表并根据每个对象的矩形限制测试鼠标指针坐标很容易处理。

这两个基本操作可以在软件中轻松完成,甚至可以在专用硬件中完成。其他一些不基于矩形的方法会做得更多。

于 2012-07-31T16:09:31.920 回答
3

我从来没有遇到过一种光栅图形文件格式,它可以存储除矩形像素阵列或其压缩版本之外的任何内容。为了存储一些任意形状,文件必须以某种形式包含文件中像素将被填充到的形状的规范。我可以看到它是如何完成的,但我从未见过它完成。

一种方法非常简单:

  • 存储一个由 0 和 1 组成的矩形数组,其中 1 表示文件包含规范的像素;
  • 存储像素本身,在上述数组中每个 1 一个。

另一种方法是存储:

  • 图像矩形边界框的尺寸(以像素为单位);
  • 在文件的数据部分中,每行中第一个像素相对于矩形边界框的位置;
  • 像素本身。

很难找到一个令人信服的理由来处理这种方法引发的并发症。

当然,矢量图形是另一种鱼。

于 2012-07-31T16:08:32.643 回答
3

我知道这不是您的想法,但是可以组合无限多、无限薄、完美定位的矩形图像来创建任意的非矩形形状。

请参阅http://meyerweb.com/eric/css/edge/raggedfloat/demo.html

当然,在现实世界中,您将被限制为至少 1 px 的高度/宽度。

于 2012-07-31T16:20:15.637 回答
1

计算机编程基于矩阵,该矩阵具有确定的行和列,也是 90 度。因此设备以运行程序的方式制造,因此屏幕是矩形的。

于 2015-02-26T01:28:23.240 回答
1

问题是您的像素不会相同。图像的关键特征之一是所有行的大小相同。这是因为如果行的长度不同,则数组的维度将不一致。以这种方式对称划分圆的唯一方法是使用圆内的直径和圆。所以圆形图像中的像素看起来像这样: 几何上不完美,自制

它看起来像这样的原因很简单。考虑获取矩形坐标的最有效方法。这当然是通过(距离 x,距离 y)的元组,因为对于最大 x 的一些任意限制和对 y 的单独限制,这些坐标的范围是一个矩形。但是,将填充一个圆的坐标范围将由成对的(距离 x,度 y)组成。使用 (x,y) 坐标是可能的,但它本质上是在圆周围制作一个正方形,并在该正方形上找到一些不允许的点。当我们将圆坐标划分为像素时,它们看起来像上面那样。这里的每个部分都是一个像素。然而,有一个相当大的问题:最靠近边缘的像素比靠近中心的像素大。为了获得高清晰度的外部像素,您需要内部像素的图像质量不合理。那将是巨大的空间浪费。圆形图像看起来像您发布的图像的原因是因为矩形分区均匀,因此没有这个问题。因此,人们通常更喜欢只取圆圈周围的正方形。制作一种新的图像格式只是为了排除角落中相当少量的像素是很荒谬的,所以他们只使用现有的。希望这是您正在寻找的答案。人们通常更喜欢只取圆圈周围的正方形。制作一种新的图像格式只是为了排除角落中相当少量的像素是很荒谬的,所以他们只使用现有的。希望这是您正在寻找的答案。人们通常更喜欢只取圆圈周围的正方形。制作一种新的图像格式只是为了排除角落中相当少量的像素是很荒谬的,所以他们只使用现有的。希望这是您正在寻找的答案。

于 2019-09-16T23:42:09.143 回答