Рендеринг полного UIImageView в растровое изображение - PullRequest
2 голосов
/ 09 января 2012

Я знаю, как отобразить обычный UIView для растрового изображения:

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

Проблема в том, что если view - это UIImageView с растянутым изображением с изменяемым размером, возвращаемым из resizableImageWithCapInsets:, то bitmapImage, полученное таким образом, - это исходное изображение - не растянутое - вместо действительно отображенного растянутого образ. Я легко могу сказать это по разнице в размерах между bitmapImage и view. Поэтому мой вопрос заключается в том, как отобразить весь контент, отображаемый UIImageView, чье изображение является растянутым изображением с изменяемым размером?

Ответы [ 2 ]

1 голос
/ 18 января 2012

Итак, я попробовал этот кусок кода:

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

Похоже, код работает так, как и предполагалось.

0 голосов
/ 18 января 2012

Я идиот!Код отлично работает.Я просто что-то напутал где-то еще.Глупо то, что я поместил код в метод моей категории UIView, но я назвал метод image.Он отлично работает для общих UIView с, но поскольку UIImageView имеет свой собственный метод image, а UIImageView является подклассом UIView, метод UIImageView image вызывается, когда я пытался получитьмое растровое изображение.

...