Tôi đang tạo một loạt các ô xếp cho CATiledLayer
. Mất khoảng 11 giây để tạo ra 120 ô ở 256 x 256 với 4 mức chi tiết trên iPhone 4S. Bản thân hình ảnh phù hợp trong phạm vi 2048 x 2048.Bất kỳ cách nào để mã hóa PNG nhanh hơn UIImagePNGĐại diện?
Nút cổ chai của tôi là UIImagePNGRepresentation
. Nó mất khoảng 0,10-0,15 giây để tạo ra tất cả các hình ảnh 256 x 256.
Tôi đã thử tạo nhiều ô xếp trên hàng đợi nền khác nhau, nhưng điều này chỉ cắt giảm xuống còn khoảng 9-10 giây.
Tôi cũng đã thử bằng cách sử dụng khuôn khổ ImageIO với mã như thế này:
- (void)writeCGImage:(CGImageRef)image toURL:(NSURL*)url andOptions:(CFDictionaryRef) options
{
CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((__bridge CFURLRef)url, (__bridge CFStringRef)@"public.png", 1, nil);
CGImageDestinationAddImage(myImageDest, image, options);
CGImageDestinationFinalize(myImageDest);
CFRelease(myImageDest);
}
Trong khi điều này tạo ra file PNG nhỏ hơn (giành chiến thắng!), Phải mất khoảng 13 giây, 2 giây hơn so với trước đây.
Có cách nào để mã hóa hình ảnh PNG từ CGImage
nhanh hơn không? Có lẽ một thư viện sử dụng tiện ích mở rộng ARM NEON
(iPhone 3GS +) như libjpeg-turbo?
Có lẽ định dạng nào tốt hơn PNG để lưu các ô không chiếm nhiều không gian?
Tùy chọn khả thi duy nhất mà tôi có thể đưa ra là tăng kích thước lát lên 512 x 512. Điều này làm giảm thời gian mã hóa một nửa. Bạn không chắc chắn điều gì sẽ làm cho chế độ xem cuộn của tôi. Ứng dụng này dành cho iPad 2+ và chỉ hỗ trợ iOS 6 (sử dụng iPhone 4S làm đường cơ sở).