UIImageWriteToSavedPhotosAlbum сохраняет неправильный размер и качество

Я пытаюсь снять снимок экрана текущего приложения и сохранить его в фотоальбоме (чтобы потом отправить по электронной почте или отправить MMS).

UIGraphicsBeginImageContext(self.view.bounds.size); 

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(viewImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil);

Это работает, но результирующее изображение кажется большим (533x800 пикселей) и сильно сжато, когда я отправляю его по электронной почте из библиотеки фотографий.

Я пробовал сначала писать UIImage в файл, а затем сохранять в альбом, но все равно получаю ту же проблему.

Если бы я использовал встроенные функции скриншотов на iPhone, то изображение корректно сохраняется в фотоальбоме на 320x480, но приведенный выше код по какой-то причине сохраняет более крупное изображение?

Спасибо!

Ответ 1

Я нашел подходящее обходное решение, которое должно по существу перевязать UIImage как PNG, а затем сохранить обновленную версию. Код выглядит примерно так:

UIImage* im = [UIImage imageWithCGImage:myCGRef]; // make image from CGRef
NSData* imdata =  UIImagePNGRepresentation ( im ); // get PNG representation
UIImage* im2 = [UIImage imageWithData:imdata]; // wrap UIImage around PNG representation
UIImageWriteToSavedPhotosAlbum(im2, nil, nil, nil); // save to photo album

Ответ 2

У меня была такая же ошибка, с моей стороны, которая была решена, когда я округлил десятичные точки в том же масштабе, что и iPhone, попробуйте, убедитесь, что масштаб равен 1.0, 2.0 и т.д., а не 3.1, что будет выбросьте его.