Tôi tải this (very small) image sử dụng:Làm thế nào để xác định và giải thích các định dạng pixel của một CGImage
UIImage* image = [UIImage named:@"someFile.png"];
Hình ảnh là 4x1 và nó chứa một pixel màu đỏ, xanh lá cây, xanh dương và trắng từ trái sang phải, trong thứ tự đó.
Tiếp theo, tôi nhận được dữ liệu pixel ra khỏi CGImage cơ bản:
NSData* data = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
Bây giờ, đối với một số lý do, dữ liệu pixel được đặt ra khác nhau tùy thuộc vào các thiết bị iOS.
Khi tôi chạy ứng dụng trong mô phỏng hoặc trên iPhone của tôi 4, dữ liệu pixel trông như thế này:
(255,0,0), (0,255,0), (0,0,255), (255.255,255)
Vì vậy, pixel là 3 byte cho mỗi pixel, với màu xanh lam là byte quan trọng nhất và màu đỏ là ít quan trọng nhất. Vì vậy, tôi đoán bạn gọi đó là BGR?
Khi tôi kiểm tra CGBitmapInfo, tôi có thể thấy rằng kCGBitmapByteOrderMask là kCGBitmapByteOrderDefault. Tôi không thể tìm thấy bất cứ nơi nào mà giải thích những gì "mặc định" là.
Mặt khác, khi tôi chạy nó trên iPhone thế hệ đầu tiên của tôi, dữ liệu pixel trông như thế này:
(0,0,255,255), (0,255,0,255), (255,0,0,255), (255,255,255,255)
Vì vậy, 4 byte cho mỗi kênh, alpha là byte quan trọng nhất và màu lam là ít quan trọng nhất. Vậy ... được gọi là ARGB?
Tôi đã xem xét CGBitmapInfo để tìm manh mối về cách phát hiện bố cục. Trên iPhone gen đầu tiên, kCGBitmapAlphaInfoMask là kCGImageAlphaNoneSkipFirst. Điều đó có nghĩa rằng các bit quan trọng nhất được bỏ qua. Điều đó có ý nghĩa. Trên iPhone gen đầu tiên, kCGBitmapByteOrderMask là kCGBitmapByteOrder32Little. Tôi không biết điều đó có nghĩa là gì hoặc làm thế nào để liên kết nó trở lại như thế nào các thành phần R, G và B được đặt ra trong bộ nhớ. Bất cứ ai có thể làm sáng tỏ về điều này?
Cảm ơn.
Điều này được đánh dấu là câu trả lời được chấp nhận nhưng không thực sự trả lời câu hỏi. Nó cũng có vẻ hơi giống búa trong một cái đinh bằng búa tạ. Tại sao vẽ lại toàn bộ hình ảnh bằng cách sử dụng tất cả mã đó khi tất cả mọi người thực sự muốn làm là sắp xếp thứ tự byte của dữ liệu hiện có? –
Victor, bạn đã tìm ra điều này bằng bất kỳ cơ hội nào, cụ thể là làm thế nào để đối phó với kCGBitmapByteOrderDefault? –