2012-01-12 4 views
2

В Objective C,Преобразование данных UIImage в сопзЬ неподписанного символа myArry [100]

Мне нужно преобразовать UIImage в то, что соответствует следующему типу:

const unsigned char myImg[6300] = { 0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0, 
0x0,0xff,0xff,0x0,0x0,0xff,0xff,0xff,0xff,0x0,0x0,0xff,0xff,0xff, 
0xff,0xff,0xff,0xff,0xff,0x0,0x0,0xff,0xff, etc etc etc } 

Я прочитал документацию NSData и попробовал:

self.animalImage = [UIImage imageNamed:@"animal.png"]; 
self.animalData = UIImagePNGRepresentation(self.animalImage); 
NSUInteger size = [self.animalData length]/sizeof(unsigned char); 
unsigned char* array = (unsigned char*) [self.animalData bytes]; 

Но результат мусора или ноль, мне нужно, чтобы соответствовать выше формат точно. Есть предположения? Спасибо заранее за любые советы!

+0

Вы действительно хотите получать данные в формате PNG? Или вы ищете растровое изображение вашего изображения? –

+1

Каков ваш пример форматирования? Вам нужно какое-то двоичное изображение, где каждый пиксель равен 0 или 255, или вы хотите стандартное представление растрового изображения RGB, где каждая тройка байтов - это красное, зеленое и синее значение пикселя? Прямо сейчас, что вы получаете, это байты, представляющие PNG (то есть сжатую) версию изображения. – UIAdam

ответ

0

Вы говорите, что ваш результат «мусор или ноль», но в документации говорится, что он либо вернет данные байта изображения, либо nil, если встретится с ошибкой.

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImagePNGRepresentation

Я не вижу, как это может генерировать различные результаты с тем же изображением, так что я собираюсь угадать вы пробовали его с некоторыми различными изображениями, возможно, некоторые из них на самом деле не PNG изображений. Те, что он не смог правильно разобрать, возвратили nil, а «мусор», который вы описываете, - это, вероятно, фактически нужные вам данные.

Как только у вас есть экземпляр NSData*, вы можете использовать enumerateByteRangesUsingBlock, чтобы построить свой новый массив, в котором вы нуждаетесь.

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/

Смежные вопросы