Конвертируйте данные UIImage в const unsigned char myArry [100] - PullRequest
2 голосов
/ 13 января 2012

В объективе c,

Мне нужно преобразовать 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];

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

1 Ответ

0 голосов
/ 01 мая 2015

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

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/

...