Я загружаю это (очень маленькое) изображение Использование:
UIImage* image = [UIImage named:@"someFile.png"];
Изображение 4x1, и он содержит красный, зеленый, синий и белый пиксель слева направо, в этом порядок.
Далее я получаю данные пикселей из базового CJIMage:
NSData* data = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
Теперь по какой-то причине данные пикселей выложены по-разному в зависимости от устройства iOS.
Когда я запускаю приложение в симуляторе или на своем iPhone 4, данные пикселей выглядят следующим образом:
(255,0,0), (0,255,0), (0,0,255), (255,255,255)
Итак, пиксели являются 3 байтами на пиксель, синим, как самый значительный байт и красный, как наименее значимый. Поэтому я думаю, вы называете это BGR?
Когда я проверяю CGBitMapinfo, я вижу, что KCGBitMapbyteordermask - KCGBitMapbyteorderDefault. Я не могу найти нигде, что объясняет, что «по умолчанию».
С другой стороны, когда я бегу на своем первом iPhone, данные пикселей выглядят следующим образом:
(0,0,255,255), (0,255,0,255), (255,0-255), (255,255,255,255 )
Так что 4 байта на канал, альфа как наиболее значительный байт и синий как наименее значимый. Итак ... это называется ARGB?
Я смотрел на CGBitMapinfo для подсказки на том, как обнаружить макет. На первом Gen iPhone KCGBITMAPALPHANFOMASK - KCGIMAGEALPHANONESKIPFIRST. Это означает, что наиболее значимые биты игнорируются. Так что имеет смысл. На первом Gen iPhone KCGBITMAPBYTEORDERMASK является KCGBITMapbyteorder32Little. Я не знаю, что это значит или как обратно относиться к тому, как компоненты R, G и B выложены в памяти. Может ли кто-нибудь пролить свет на это?
Спасибо.