2013-08-03 21 views
11

Tôi hiện đang sử dụng UIGraphicsGetImageFromCurrentImageContext() để lưu hình ảnh của nội dung vào cuộn camera của người dùng, nhưng chất lượng hình ảnh kém hơn nếu tôi chụp màn hình trong trình mô phỏng. Có cách nào để cải thiện nó không? Và định dạng hình ảnh đã lưu là gì? Bmp? Có cách nào để thay đổi điều này không?Hình ảnh chất lượng tốt hơn từ UIGraphicsGetImageFromCurrentImageContext()

Đây là mã tiết kiệm của tôi:

CGSize size = [content bounds].size; 
UIGraphicsBeginImageContext(size); 
[[content layer] renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *originalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
+0

lớn như thế nào là của bạn "' size'"? nếu nó không thực sự lớn, thì độ phân giải của bạn sẽ khá kém. –

+0

Nó có cùng kích thước màn hình. Tôi không xem hình ảnh đã lưu ở nơi khác. Tôi đã lưu nó trên trình mô phỏng và đi đến cuộn camera của trình mô phỏng và có vẻ tệ hơn nhiều so với trong ứng dụng. –

Trả lời

36

Thay vì sử dụng UIGraphicsBeginImageContext bạn nên sử dụng:

UIGraphicsBeginImageContextWithOptions(size, NO, 0); 
+0

Nó hoạt động! Làm thế nào về các loại tập tin lưu? –

+0

Tôi tin rằng nó tiết kiệm như jpg. – Wain

+0

Điều này chỉ làm cho hình ảnh hiển thị với conrentscale chính xác. Giá trị 0 là giá trị mặc định (bằng với tỷ lệ '[màn hình chính UIScreen] '). Để lưu dưới dạng JPG hoặc PNG, hãy sử dụng UIImageJPGĐại diện hoặc UimagePNGĐại diện trên hình ảnh kết quả. –

0

Nếu bạn đang ở trên võng mạc hiển thị kích thước của bối cảnh chỉ là một nửa kích thước của hình ảnh "thật".

Cố gắng tăng gấp đôi kích thước (hoặc sử dụng đúng nội dungScaleFactor của chế độ xem).

+0

Đúng, dường như là vấn đề. Làm cách nào để sử dụng contentScaleFactor để mở rộng hình ảnh đầu ra? –

+0

Giống như vậy: size.width * = [[content layer] contentsScale]; size.height ... – Tom