gpt4 book ai didi

ios - 此代码是在点级别还是像素级别绘制的?如何绘制视网膜像素?

转载 作者:可可西里 更新时间:2023-11-01 04:32:52 25 4
gpt4 key购买 nike

考虑这个绘制(圆形)渐变的令人钦佩的脚本,

https://github.com/paiv/AngleGradientLayer/blob/master/AngleGradient/AngleGradientLayer.m

int w = CGRectGetWidth(rect);
int h = CGRectGetHeight(rect);

然后

angleGradient(data, w, h ..

然后循环遍历所有这些

for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++) {

基本设置颜色

    *p++ = color;

但是等等 - 这不是按点而不是像素工作吗?

实际上,您会如何在密集屏幕上绘制物理像素?

这是一个问题:

Let's say the density is 4 on the device. Draw just as in the above code, but, on a bitmap four times as big, and then put it in the rect?

这看起来很困惑 - 但就是这样吗?

最佳答案

[注意:github 示例中的代码以像素为基础计算梯度。 github 示例中的代码以点为基础计算梯度。 -胖子]

代码以像素为单位工作。首先,它用像素颜色数据填充一个简单的光栅位图缓冲区。这显然没有图像比例或像素以外的单位的概念。接下来,它从该缓冲区创建一个 CGImage(以一种有点奇怪的方式)。 CGImage 除了像素之外也没有比例或单位的概念。

问题出在绘制 CGImage 的地方。此时是否进行缩放取决于图形上下文及其配置方式。上下文中存在从用户空间(点,或多或少)转换为设备空间(像素)的隐式转换。

-drawInContext: 方法应该使用 CGContextConvertRectToDeviceSpace() 转换矩形以获得图像的矩形。请注意,未转换的矩形仍应用于调用 CGContextDrawImage()

因此,对于 2x Retina 显示上下文,原始矩形将以磅为单位。比方说 100x200。图像 rect 的大小将加倍以表示像素,200x400。绘制操作会将其绘制到 100x200 矩形,这看起来像是将大的、高度详细的图像缩小,丢失信息。然而,在内部,绘制操作会在进行实际绘制之前将目标矩形缩放到设备空间,并从 200x400 像素的图像中填充 200x400 像素的区域,保留所有细节。

关于ios - 此代码是在点级别还是像素级别绘制的?如何绘制视网膜像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com