gpt4 book ai didi

iphone - UIGraphicsBeginImageContextWithOptions 中的 CGContextDrawImage 忽略了 UIEdgeInsets

转载 作者:可可西里 更新时间:2023-11-01 05:03:27 29 4
gpt4 key购买 nike

在绘制到屏幕外缓冲区时,我很难让 Image Insets 正常工作。

在 UIImage 上直接使用 resizableImageWithCapInsets: setImage: into a button 对我来说效果很好:

UIImage * base = [UIImage imageNamed:@"button.png"];
UIImage * img = [base resizableImageWithCapInsets:UIEdgeInsetsMake(20,20,20,20)];
[self setImage:img forState:UIControlStateNormal];

如下图(左边是原始缩放,右边是用插图缩放):

Image stretched without ado Image stretched with decent insets

所以右边的很好 - 顶部/底部/左侧/右侧的线间距相等。到目前为止一切顺利。

现在,如果我尝试对绘制的图像进行完全相同的操作,然后使用以下命令捕获到屏幕外缓冲区:

UIImage * base = [UIImage imageNamed:@"button.png"];
base = [base resizableImageWithCapInsets:UIEdgeInsetsMake(20,20,20,20)];

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0);
ctx = UIGraphicsGetCurrentContext();

CGContextDrawImage(ctx, CGRectMake(0,0,self.bounds.size.width,
self.bounds.size.height), [base CGImage]);

img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
[self setImage:img forState:UIControlStateNormal];

我在下面(同样左边是原始缩放,右边是带有插图):

raw scaling, side buffer scaling with inset, side buffer (WRONG!) .

所以这里似乎忽略了插图。

有人对这里出了什么问题有任何建议吗?功能齐全的示例位于 http://people.apache.org/~dirkx/insetSample.zip以及位于 http://pastebin.com/rm8h6YFV 的关键代码.

感谢任何和所有建议。

Dw

最佳答案

我猜测可伸缩 UIImages 的处理级别高于 Quartz2D,因此使用 CGContextDrawImage 将无法正常工作。

您可以尝试使用 -[UIImage drawInRect] 代替。这将绘制到当前 UIGraphics 上下文,这是您在代码片段中创建的位图上下文。

相关行是:

[base drawInRect:CGRectMake(0,0,self.bounds.size.width,
self.bounds.size.height)];

关于iphone - UIGraphicsBeginImageContextWithOptions 中的 CGContextDrawImage 忽略了 UIEdgeInsets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562742/

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