4

実際にNSString内に保持されているバイト配列からUIImageを作成しようとしています。

誰かが私にそれを行う方法を教えてもらえますか?

これが私がやろうと思っていたことです:

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 (nil) であることです。

任意の提案をいただければ幸いです。

ありがとう!

4

3 に答える 3

13

画像を文字列に変換するNSDataには、base64Encoded 文字列に変換して元に戻すメソッドが必要です (ここに多くの例があります)。最も簡単に使用できるのはカテゴリNSDataです。次のようなことができます。

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

逆方向に移動するには、リバース コンバーターが必要です。

UIImage* image = [UIImage imageWithData:[NSData 
            dataFromBase64EncodedString: pictureDataString]];
于 2009-07-09T00:10:45.600 に答える
0

画像データにはいくつかのヌル文字 (0x00) が含まれているに違いありません。ご存知のように、これは文字列のターミネータであるため、C 文字列を要求すると、データが少なすぎる可能性があります。

次のようなものを試してください - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding; NSData を生成します。

それでもうまくいかない場合は、データを NSString (null 文字が埋め込まれている) に設定してもデータが失われないかどうかを評価する必要があります。

他の回答者の 1 人のように、データを base-64 でエンコードするのが良い考えかもしれません (文字列を使用して img データを転送する必要がある場合)。

幸運を。

于 2009-11-13T17:52:17.733 に答える
0

[UIImage imageWithData:data];渡されたデータを理解できない場合は nil を返します。エンコーディングなどを再確認します。バイナリ文字列が何らかのエンコーディング(base64など)なしで純粋な画像データを保持するのは奇妙です。文字列エンコーディングとバイナリ エンコーディングには互換性がありません。

于 2009-07-08T23:23:37.410 に答える