将完整的UIImageView渲染为位图图像

时间:2012-01-09 12:22:21

标签: ios uiimageview uiimage

我知道如何将正常的UIView渲染为位图图像:

UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *bitmapImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

问题在于,如果viewUIImageView,其中resizableImageWithCapInsets:bitmapImage返回了可调整大小的图片,bitmapImage就是这样的原始图像 - 未拉伸一个 - 而不是真正显示的拉伸图像。我可以通过viewUIImageView之间的大小差异轻松判断出来。所以我的问题是如何呈现由{{1}}显示的完整内容,其图像是拉伸的可调整大小的图像?

2 个答案:

答案 0 :(得分:1)

所以,我尝试了这段代码:

UIEdgeInsets edgeInsets = UIEdgeInsetsMake(-20, -20, -20, -20);
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
imageView.image = [[UIImage imageNamed:@"number1.png"] resizableImageWithCapInsets:edgeInsets];
[self.view addSubview:imageView];
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 0.0);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *bmImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSArray *documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentsPaths objectAtIndex:0];
[UIImagePNGRepresentation(bmImage) writeToFile:[documentsDir stringByAppendingString:@"num1.png"] atomically:YES];

得到了这个:

enter image description here

从此:

enter image description here

所以看起来代码的工作原理应该如此。

答案 1 :(得分:0)

我是个白痴!代码完美无缺。我只是把别的东西搞砸了。愚蠢的是我将代码放在我的UIView类的方法中,但我将方法命名为image。它适用于一般UIView,但由于UIImageView有自己的image方法,而UIImageViewUIView的子类,UIImageView'当我试图获取位图图像时调用s image方法。