2012-09-14 36 views
16

Tôi đang cố gắng vẽ hình ảnh bằng phương pháp 's drawInRect:. Đây là mã:Bản vẽ của UIImage: làm mịn hình ảnh

UIImage *image = [UIImage imageNamed:@"OrangeBadge.png"]; 

UIGraphicsBeginImageContext(image.size); 

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Vấn đề là hình ảnh bị mờ. Dưới đây là hình ảnh kết quả (ở bên phải) so với hình ảnh nguồn (ở bên trái):

Source image and blurred image

Tôi đã thử cả hai CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), NO)CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), NO) nhưng điều này không giải quyết vấn đề.

Bất kỳ ý tưởng nào?

Xin cảm ơn trước.

Trả lời

29

Nếu bạn đang phát triển trên thiết bị võng mạc, có thể sự cố liên quan đến độ phân giải của ngữ cảnh đồ họa của bạn. Bạn có thử với:

UIGraphicsBeginImageContextWithOptions(size, NO, 2.0f); 

Điều này sẽ cho phép độ phân giải võng mạc. Ngoài ra, hình ảnh của bạn sẽ có sẵn ở độ phân giải @ 2x để làm việc này.

Nếu bạn muốn hỗ trợ các thiết bị không võng mạc là tốt, bạn có thể sử dụng:

if ([UIScreen instancesRespondToSelector:@selector(scale)]) { 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0f); 
} else { 
    UIGraphicsBeginImageContext(newSize); 
} 
+2

tôi sẽ không khuyên bạn nên kiểm tra bình đẳng phao sử dụng '=='. Tất cả những gì bạn phải làm là đặt tỷ lệ thành '0.f' và khung sẽ đảm nhiệm phần còn lại. (xem http://stackoverflow.com/questions/2765537/how-do-i-use-the-nsstring-draw-functionality-to-create-a-uiimage-from-text) – Mazyod

+1

Cảm ơn bạn rất nhiều! Điều này giải quyết vấn đề. 'if ([UIScreen instancesRespondToSelector: @selector (scale)])' - là dòng này cho hỗ trợ iOS3? Thuộc tính 'scale' được hỗ trợ bắt đầu từ iOS 4.0. – tonytony

+0

@Mazyod Tôi có hiểu được rằng '0.0f' sẽ làm cho khung công tác xử lý đúng quy mô, bất kể đó là võng mạc hay không võng mạc trên thiết bị dòng điện? – Timo

Các vấn đề liên quan