#iphone #cocoa-touch #image #imageview #screen-capture
#iPhone #cocoa-touch #изображение #просмотр изображений #захват экрана
Вопрос:
Могу ли я как-то программно создать экран печати из одного ImageView?
Допустим, я показываю большие фотографии разных размеров, автоматически масштабируемые (aspectFit) в соответствии с размером экрана, по центру и на черном фоне. Я хотел бы захватить масштабированное изображение, включая черный фон imageview, чтобы иметь изображение 320×480 для работы.
Итак, как изменить, например, изображение 350×600 на 320×480 с черной рамкой и без каких-либо других элементов (кнопок, меток), перекрывающих это изображение? На Android я просто захватываю буфер экрана, но для iPhone я действительно понятия не имею, как это сделать…
Заранее спасибо!
Ответ №1:
UIGraphicsBeginImageContext(<specify your size here as CGRect>);
[<yourImageView or view you want to convert in image>.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
viewImage
Выводится. Поскольку вы хотите черную рамку, чтобы у вас была подобная логика, добавьте вас imageView
в UIView с blackBackroundColor
черным цветом (помните, что рамка этого вида должна быть больше рамки вашего ImageView с некоторым отступом с каждой стороны, чтобы у вас была своя граница) ….. и теперь [<yourView>.layer renderInContext:UIGraphicsGetCurrentContext()];
используйте этот метод.
Комментарии:
1. Говоря об этой границе, я просто имел в виду черный фон, когда изображение масштабируется по размеру в полноэкранном режиме imageview. В любом случае, когда я сохраняю UIImage в файл, он белый и пустой : (
Ответ №2:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 480), NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
yourImageViewToStoreCaptured = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Надеюсь, это поможет.
Комментарии:
1. Сохранение UIImage * yourImageViewToStoreCaptured на диск приводит к получению пустого белого файла размером 8 кб: (Я снимаю self.imageview. слой.
Ответ №3:
-(IBAction)saveViewToPhotoLibrary:(id)sender
{
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);
[self.view.layer renderInContext:ctx];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenImage,nil,nil,nil);
//fill cordinat in place of nil if u want only image comes and not button......ok thanks vijay//
UIGraphicsEndImageContext();
}