Как определить и интерпретировать формат пикселя CJIMAGE

Я загружаю это (очень маленькое) изображение Использование:

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 выложены в памяти. Может ли кто-нибудь пролить свет на это?

Спасибо.

7
задан STW 7 August 2013 в 13:51
поделиться