colworWithPatternImage 返回一个 1 像素的透明边框
Posted
技术标签:
【中文标题】colworWithPatternImage 返回一个 1 像素的透明边框【英文标题】:colworWithPatternImage returning a 1 pixel transparent border 【发布时间】:2016-08-25 09:30:43 【问题描述】:我正在尝试创建具有平铺图案的图像,但平铺图像似乎具有 1 像素的透明边框。即使我只使用白色背景图像,我仍然会得到透明边框。
UIImage *patternImage=[UIImage imageNamed:@"whiteimage.png"];
CALayer *layer=[[CALayer alloc] init];
layer.frame=CGRectMake(0, 0, 2048, 1536);
layer.backgroundColor=[UIColor colorWithPatternImage:patternImage].CGColor;
UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0,0,2048,1536)];
[view setOpaque:YES];
[view.layer addSublayer:layer];
图案图像
带有透明 1px 边框的平铺图像
图案图像是使用双三次重采样从 Photoshop 导出的,但我也尝试过双线性和最近邻方法。此外,如果我在 Photoshop 中将图像用作图案,我不会得到透明边框,这让我认为它与 ios 相关。
【问题讨论】:
这实际上是您使用的图案图像吗?怎么这么大? 白色图案图像不必那么大,但我使用的样本大小相似。平铺图像用于形成地板,其中应用了透视变换,因此需要相当大才能填充地板。 上面的代码对我来说很好,你对图像和视图做了什么?例如为什么在您的第二张图片中,平铺的图片要小得多? 抱歉@JamesP 我忘了包含我的调整大小功能,该功能将图像缩小,结果证明是问题所在。 【参考方案1】:-(UIImage*) resizeImage:(UIImage*)image newSize:(CGSize)newSize
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
我忘记在我的问题中包含我的帮助方法来缩放平铺图像。正是这种方法给我带来了问题。当我将宽度和高度增加一个像素时,我不再在返回的图像中获得透明边框。
-(UIImage*) resizeImage:(UIImage*)image newSize:(CGSize)newSize
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width+1, newSize.height+1)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
【讨论】:
以上是关于colworWithPatternImage 返回一个 1 像素的透明边框的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )