gpt4 book ai didi

iphone - iPhone 5 硬件上的奇怪 colorWithPatternImage

转载 作者:太空狗 更新时间:2023-10-30 03:22:23 35 4
gpt4 key购买 nike

在空白的 UIViewController 中,我通过以下方式更改屏幕颜色:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blackPattern.png"]];

然后我用我的 iPhone 5 截屏。图像如下所示:

enter image description here

如果您以 100% 的比例查看图像,您将看到三个条(顶部、左侧和底部)。然而,我的图案图像非常简单(blackPattern@2x.png):

enter image description here

它是用于视网膜显示的 8x8 png。

具有讽刺意味的是,当应用程序在模拟器上运行时,这些栏是不可见的。它是 iPhone 5 硬件特定的症状吗?

附注如果你想看到它运行,你可以下载我的应用程序:here

最佳答案

很有趣。我可以在 iPhone 5 上重现该问题(不是在模拟器上,甚至不是在视网膜模式下)。

一些想法和观察:小图案图像中的颜色完全是黑色和白色(0 和 255,每个 r、b 和 g)。在全屏图像中它不是。中间是 8 和 247,底部是 12,243,边上是 4,251。

这看起来很像插值伪像:当 Core Graphics 将图像中的像素绘制到设备像素上并且像素不完全匹配时,它会计算来自相邻源像素的插值颜色。黑色和白色会导致深灰色和亮灰色:我们在这种情况下看到的效果。

我仍然不知道为什么这只发生在设备上。

稍微研究一下这个问题,我没有找到原因,而是找到了解决问题的方法:自己创建棋盘图案颜色:

static void patternDrawPatternCallback(void *info, CGContextRef c)
{
for (int y = 0; y < 8; ++y) {
for (int x = 0; x < 8; ++x) {
CGFloat v = (x + y) & 1;
CGContextSetRGBFillColor(c, v, v, v, 1);
CGContextFillRect(c, (CGRect){{x, y}, {1, 1}});
}
}
}

static void patternReleaseInfoCallback(void *info)
{
}

static UIColor *checkerColor()
{
CGPatternCallbacks callbacks = {
.drawPattern = patternDrawPatternCallback,
.releaseInfo = patternReleaseInfoCallback,
};

CGFloat scale = 1.0f / [UIScreen mainScreen].scale;
CGPatternRef pattern = CGPatternCreate(NULL,
(CGRect){.size={8, 8}},
CGAffineTransformMakeScale(scale, scale),
8, 8,
kCGPatternTilingConstantSpacing,
YES,
&callbacks);

CGFloat components[] = {1, 1, 1, 1};
CGColorSpaceRef colorspace = CGColorSpaceCreatePattern(NULL);
CGColorRef color = CGColorCreateWithPattern(colorspace, pattern, components);
CGColorSpaceRelease(colorspace);
CGPatternRelease(pattern);

UIColor *checkerColor = [UIColor colorWithCGColor:color];
CGColorRelease(color);

return checkerColor;
}

使用此代码中的颜色我无法重现该问题(即使我使用了图案拼贴并将拼贴的大小设置为略有偏差)。

关于iphone - iPhone 5 硬件上的奇怪 colorWithPatternImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14768331/

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