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 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

使用fiddler修改返回值以及返回状态码

Android开发如何点击物理返回键返回上个界面

Javascript:嵌套返回语句,返回内部返回

Android——关于Activity跳转的返回(无返回值和有返回值)——无返回值

JAVA里的函数返回值,可以返回几个?