Экран печати iPhone imageview — создание нового изображения из imageview

#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();    
}