Я загружаю это (очень маленькое) изображение , используя:
UIImage* image = [UIImage named:@"someFile.png"];
Изображение 4x1, и оно содержит красный, зеленый, синий и белый пиксель слева направо, в таком порядке.
Далее я получаю данные пикселей из базового CGImage:
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,255,255), (0,255,0,255), (255,0,0,255), (255,255,255,255)
Таким образом, 4 байта на канал, альфа как наиболее значимый байт и синий как наименее значимый.Итак ... это называется ARGB?
Я искал в CGBitmapInfo подсказки о том, как определить макет.На iPhone первого поколения kCGBitmapAlphaInfoMask имеет вид kCGImageAlphaNoneSkipFirst.Это означает, что наиболее значимые биты игнорируются.Так что это имеет смысл.На iPhone первого поколения kCGBitmapByteOrderMask имеет вид kCGBitmapByteOrder32Little.Я не знаю, что это значит или как связать это с тем, как компоненты R, G и B расположены в памяти.Кто-нибудь может пролить свет на это?
Спасибо.