在UIGraphicsBeginImageContextWithOptions中的CGContextDrawImage上忽略了UIEdgeInsets

Dir*_*lik 4 iphone core-graphics ios ios5

在绘制到屏幕外缓冲区时,我正在努力让Image Insets工作.

在UIImage上直接使用resizableImageWithCapInsets:setImage:into按钮对我来说很好用:

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

如下所示(左边是原始缩放,右边是使用insets缩放):

图像拉伸没有ado 图像延伸有适当的插图

所以正确的一个很好 - 顶部/底部/左/右的线是等距的.到现在为止还挺好.

现在,如果我尝试使用绘制的图像进行相同的操作,然后将其捕获到屏幕外缓冲区,其中:

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];
Run Code Online (Sandbox Code Playgroud)

我得到了下面(再次左边是原始缩放,右边是插图):

原始缩放,边缓冲使用inset,side buffer进行缩放(错误!).

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

有人对这里出了什么问题有任何建议吗?在全功能例如http://people.apache.org/~dirkx/insetSample.zip,只是在关键代码http://pastebin.com/rm8h6YFV.

任何和所有建议表示赞赏.

DW

Rob*_*ill 13

我猜可伸缩的UIImages处理的级别比Quartz2D高,所以使用CGContextDrawImage不起作用.

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

相关的是:

[base drawInRect:CGRectMake(0,0,self.bounds.size.width,
                                    self.bounds.size.height)];
Run Code Online (Sandbox Code Playgroud)