2009-07-08 2 views
4

Я пытаюсь создать UIImage из массива байтов, который фактически хранится в NSString.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]; 

Проблема заключается в том изображение всегда 0x0 (ноль).

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

Спасибо!

ответ

13

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

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

Для перехода в другую сторону, вам нужен обратный преобразователь:

UIImage* image = [UIImage imageWithData:[NSData 
      dataFromBase64EncodedString: pictureDataString]]; 
+0

Спасибо. Вторая часть вашего ответа - это то, чем я был. – nicktmro

+0

base64Encoding больше не доступен для NSData –

0

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

0

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

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

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

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

удачи.

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