2012-04-04 15 views
9

Trong ứng dụng của tôi, tôi đang sử dụng phương pháp chụp màn hình. Trên iPad 2 của tôi nó rất nhanh (khoảng 130 ms) để thực hiện phương pháp này. Nhưng trên iPad mới (chắc chắn là do độ phân giải cao nhất và cùng một CPU), nó giống như 700 ms! Có cách nào để tối ưu hóa phương pháp của tôi không? Có lẽ có một cách để làm việc trực tiếp với card đồ họa?iPad 3 ảnh chụp màn hình chậm

Dưới đây là phương pháp chụp màn hình của tôi:

- (UIImage *)image { 
CGSize imageSize = self.bounds.size; 

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale); 
else UIGraphicsBeginImageContext(imageSize); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSaveGState(context); 
CGContextTranslateCTM(context, [self center].x, [self center].y); 
CGContextConcatCTM(context, [self transform]); 
CGContextTranslateCTM(context, -[self bounds].size.width * [[self layer] anchorPoint].x, -[self bounds].size.height * [[self layer] anchorPoint].y); 
[[self layer] renderInContext:context]; 
CGContextRestoreGState(context); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return image; 

}

Nhờ sự giúp đỡ của bạn.

+0

Không thể giúp bạn ở đây. Nhưng tôi nghĩ rằng 700ms là rất chậm. Nó không nên giống như 130ms * 4 = 520ms? –

+0

Hãy thử sử dụng 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, 0.0f);' thay vì 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);'. Điều này sẽ tạo cho ảnh chụp màn hình 1: 1. Hoặc có lý do cụ thể nào bạn cần '[UIScreen mainScreen] .scale' ở đó không? –

+0

@ Jenox yeah nó phụ thuộc nhưng nó giống như 700ms. – Pierre

Trả lời

3

Tôi nghĩ rằng đó là nhà phát triển của Flipboard nói về vấn đề này trên một podcast. Đó là một vấn đề thực sự với iPad 3, bởi vì họ đã tăng gấp bốn lần pixel.

Những gì anh ấy đang làm là chụp ảnh màn hình trước thời hạn trong nền chứ không phải khi người dùng khởi tạo tác vụ - trong trường hợp của anh ấy khi người dùng "lật" trang.

Tôi không biết điều này sẽ giúp bạn trong trường hợp của bạn, nhưng nó chắc chắn là một cách tiếp cận khả thi đối với nhiều trường hợp.

0

Điều này có thể hoặc không đủ cho ứng dụng của bạn nhưng một tùy chọn là chia tỷ lệ ảnh chụp màn hình xuống, ví dụ: chuyển 0,5 làm hệ số tỷ lệ của bạn thành UIGraphicsBeginImageContextWithOptions. 4x nhanh hơn nhưng sự cân bằng là mất chi tiết/độ phân giải.