0

アプリでiPhoneライブラリの画像を使用しています。次の方法はうまくいきますが、NSDataを使用して画像をアーカイブするときに問題があります。後で画像がアーカイブ解除されると、UIImage のサイズは元のサイズに戻りますか?

NSData *data = [[NSData alloc]init];
UIImage *reducedImage = [self imageWithImage:selectedImage      scaledToSize:CGSizeMake(50,50)];
data = [NSKeyedArchiver archivedDataWithRootObject:reducedImage];

そしてここで私が使用している方法;

 - (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
 }
4

3 に答える 3

0

UIImage drawInRectUIImageに添付されたビットマップ画像を指定した領域に合わせるだけです。データ自体は変更されていません...

あなたが探しているのは圧縮です。UIKitUIImagePNGRepresentationまたはUIImageJPEGRepresentation関数を参照してください。

于 2013-02-11T14:39:57.287 に答える
0

元のサイズに戻す必要があるかどうかを尋ねていますか? もしそうなら、そうすべきです。NSKeyedArchiver は、オブジェクトを単なるデータに変換するために使用されるため、オブジェクトをコア データまたはその他のストレージ方法に簡単に保存できます。これは圧縮の形式ではありません。

編集:使用しているサイズへのスケールも圧縮の形式ではありません。表示されている画像を縮小するだけで、すべての画像データはまだそこにあります。

于 2013-02-11T14:24:26.137 に答える
0

これは圧縮された zip ファイルを作成することを意味するのではなく、関連するすべてのデータをまとめて 1 つのファイルに保存することを意味します。

NSCoder の具体的なサブクラスである NSKeyedArchiver は、オブジェクト (およびスカラー値) を、ファイルに格納できるアーキテクチャに依存しない形式にエンコードする方法を提供します。オブジェクトのセットをアーカイブすると、各オブジェクトのクラス情報とインスタンス変数がアーカイブに書き込まれます。NSKeyedArchiver のコンパニオン クラスである NSKeyedUnarchiver は、アーカイブ内のデータをデコードし、元のセットと同等のオブジェクトのセットを作成します。

キー付きアーカイブは、アーカイブにエンコードされたすべてのオブジェクトと値に名前またはキーが与えられるという点で、キー付きアーカイブとは異なります。鍵のないアーカイブをデコードする場合、値はエンコードされたのと同じ順序でデコードする必要があります。鍵付きアーカイブをデコードする場合、値は名前で要求されるため、値が順不同でデコードされたり、まったくデコードされなかったりする可能性があります。したがって、キー付きアーカイブは、上位互換性と下位互換性をより適切にサポートします。

エンコードされた値に与えられるキーは、エンコードされている現在のオブジェクトの範囲内でのみ一意である必要があります。キー付きアーカイブは階層的であるため、オブジェクト A がインスタンス変数をエンコードするために使用するキーは、オブジェクト A と B が同じクラスのインスタンスであっても、オブジェクト B が使用するキーと競合しません。ただし、1 つのオブジェクト内では、サブクラスで使用されるキーがそのスーパークラスで使用されるキーと競合する可能性があります。

NSArchiver オブジェクトは、アーカイブ データをファイルまたは指定した可変データ オブジェクト (NSMutableData のインスタンス) に書き込むことができます。

于 2013-02-11T14:25:18.470 に答える