UIImage из байтов, хранящихся в NSString - PullRequest
4 голосов
/ 09 июля 2009

Я пытаюсь создать UIImage из байтового массива, который фактически содержится в строке NSString.

Может кто-нибудь сказать мне, как я могу это сделать?

Вот что я хотел сделать:

NSString *sourceString = @"mYActualBytesAREinHERe=";
//get the bytes
const char *bytesArray = [sourceString cStringUsingEncoding:NSASCIIStringEncoding];
//build the NSData object
NSData *data = [NSData dataWithBytes:bytesArray length:[sourceString length]];
//create actual image
UIImage *image = [UIImage imageWithData:data];

Проблема в image всегда 0x0 (ноль).

Любые предложения будут оценены.

Спасибо!

Ответы [ 3 ]

13 голосов
/ 09 июля 2009

Чтобы преобразовать изображение в строку, вам нужен метод для преобразования NSData в строку base64Encoded и обратно (множество примеров здесь ). Наиболее простыми в использовании являются категории на NSData, поэтому вы можете сделать что-то вроде этого:

UIImage* pic = [UIImage imageNamed:@"sample.png"];
NSData* pictureData = UIImagePNGRepresentation(pic);
NSString* pictureDataString = [pictureData base64Encoding];

Чтобы пойти другим путем, вам нужен обратный преобразователь:

UIImage* image = [UIImage imageWithData:[NSData 
            dataFromBase64EncodedString: pictureDataString]];
0 голосов
/ 13 ноября 2009

Могу поспорить, что в данных вашего изображения есть несколько нулевых символов (0x00), и, как вы знаете, это терминатор строки, поэтому, когда вы запрашиваете строку C, вы, вероятно, получаете слишком мало данных.

Попробуйте что-то вроде - (NSData *) dataUsingEncoding: (NSStringEncoding) кодирование; генерировать ваши NSData.

Если это не сработает, вам нужно оценить, не приводит ли установка данных к NSString (со встроенными нулевыми символами) также к потере данных.

Как и один из других респондентов, возможно, будет хорошей идеей кодировать ваши данные в base-64 (если требуется использование строки для передачи данных img)

Удачи.

0 голосов
/ 09 июля 2009

[UIImage imageWithData:data]; вернет ноль, если не поймет, какие данные ему передаются. Я бы дважды проверил вашу кодировку и т. Д. Странно, что двоичная строка содержала бы чистые данные изображения без какой-либо кодировки (base64 и т. Д.). Строковые и двоичные кодировки несовместимы.

...