2015-02-06 2 views
0

я последовал за @Rob ответ и его рисуется как я хочу ... но когда я сохранил этот образ .... ход не прозрачный большеКак сохранить изображение с прозрачным инсультом

Objective-C How to avoid drawing on same color image having stroke color of UIBezierPath

Для сохранения изображения Я написал этот код

enter image description here

-(void)saveImage { 
    UIGraphicsBeginImageContextWithOptions(self.upperImageView.bounds.size, NO, 0); 

    if ([self.upperImageView respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) 
     [self.upperImageView drawViewHierarchyInRect:self.upperImageView.bounds afterScreenUpdates:YES]; // iOS7+ 
    else 
     [self.upperImageView.layer  renderInContext:UIGraphicsGetCurrentContext()]; // pre iOS7 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndPDFContext(); 

    UIImageWriteToSavedPhotosAlbum(self.upperImageView.image, self,@selector(image:didFinishSavingWithError:contextInfo:), nil); 
} 

ответ

2

Вы либо настройки alpha в целях изображения с пути до 1,0 сек в другом месте, или вы используете то, что не разрешает прозрачные пленки (например, UIGraphicsBeginImageContextWithOptions с YES для непрозрачного параметра или для размещения изображения в формате, который не сохраняет альфа, например JPEG).

Несколько дополнительных мыслей:

  1. Я заметил, что вы только рисунок upperImageView. Если вы хотите составное изображение, вам нужно нарисовать оба. Или вы только пытаетесь сохранить один из изображений?

    (Для тех, кто не знаком с этим другим вопросом, весь смысл заключался в том, как рисовать несколько путей по изображению и иметь полный набор этих путей с тем же уменьшенным альфа, вместо того, чтобы пересечение путей приводило к некоторому аддитивное поведение. Это было достигнуто за счет наличия двух отдельных представлений изображений: одного для основного изображения и одного для рисованных путей. Ключ к ответу на этот вопрос заключался в том, что нужно рисовать пути со 100% альфой, но добавлять это как слой к виду, который сам по себе имеет уменьшенную альфу.)

  2. Что представляет собой изображение alpha изображения, на котором вы рисуете.

    NB: В ответ на этот другой вопрос при сохранении временной копии комбинированных путей. нам пришлось временно установить альфа 1.0. Но при сохранении конечного результата здесь мы хотим сохранить альфа-версию изображения «путь» по ее уменьшенному значению.

  3. Несвязанный, но вы верно напечатали опечатку (с фиксированной) в моем первоначальном примере, где я случайно назвал UIGraphicsEndPDFContext, а не UIGraphicsEndImageContext. Вы должны использовать последний.

Таким образом, учитывая два вида изображения, один с фотографией и один с нарисованным путем, называемых imageImageViewalpha 1,0) и pathsImageViewalpha 0.5), соответственно, я могу сохранить снимок как так:

- (void)saveSnapshot { 
    CGRect rect = self.pathsImageView.bounds; 

    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); 
    if ([self.pathsImageView respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { 
     [self.imageImageView drawViewHierarchyInRect:rect afterScreenUpdates:YES]; // iOS7+ 
     [self.pathsImageView drawViewHierarchyInRect:rect afterScreenUpdates:YES]; 
    } else { 
     [self.imageImageView.layer renderInContext:UIGraphicsGetCurrentContext()]; // pre iOS7 
     [self.pathsImageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    } 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
} 

Когда я сделал это, в результате составное изображение было в моем фотоальбоме:

image in photos album

+0

Большое спасибо ...... Моя проблема Исправлено: – Sapanesh

+0

Спасибо, мой вопрос исправлен – Rajesh

Смежные вопросы