Trong ứng dụng iPad của tôi, tôi sẽ hiển thị bitmap ngoài màn hình và sau đó vẽ bitmap vào màn hình. (Điều này là bởi vì tôi muốn tái sử dụng mã bitmap hiện có.) Trên iPad 2, điều này hoạt động như một sự quyến rũ, nhưng trên iPad mới với màn hình Retina, vẽ bitmap là rất chậm, mặc dù độ phân giải của nó vẫn là tương tự.Vẽ hình ảnh với CoreGraphics trên iPad Retina chậm
Để vẽ bitmap, chúng tôi sử dụng các chức năng Quartz 2D thông thường: CGImageCreate
với nhà cung cấp dữ liệu được tạo bởi CGDataProviderCreateWithData
, định dạng RGBA 32 bit với kCGImageAlphaNoneSkipLast
. Trong UIView
hiển thị bitmap, trong drawRect:
, chúng tôi sử dụng CGContextDrawImage
để vẽ nó vào ngữ cảnh được trả về bởi UIGraphicsGetCurrentContext
.
Lưu ý rằng tôi thậm chí không cố gắng vẽ ở độ phân giải kép: bây giờ tôi ổn với cùng độ phân giải như tôi đang sử dụng trên iPad 2. Có vẻ như CoreGraphics đang tăng gấp đôi pixel nội bộ và sau đó gửi đối với GPU, mặc dù CGImage
mà tôi đang tạo ra sẽ tốt cho việc chuyển trực tiếp tới GPU. Ý tưởng nào?
Cảm ơn thông tin, mà có lẽ sẽ giúp rất nhiều. Chế độ xem là hoạt ảnh, vì vậy nó sẽ vẽ lại thường xuyên. Tôi nghĩ rằng do đó bằng cách sử dụng view.layer.nội dung có lẽ hiệu quả hơn việc gán một hình ảnh mới cho UIImageView, đúng không? –
Đã thử và phương thức view.layer.contents hoạt động rực rỡ, cảm ơn bạn một lần nữa! –
AFAIK hai phương pháp gần như bằng nhau về hiệu suất, nhưng như mọi khi: nếu nó quan trọng, hãy thử nó và xem. –