2

ファイルシステムからUIImageViewビューにロードしている透明な画像がいくつかあります。私の目的のためにUIImageView、ファイルシステム上のファイルと画像を比較する必要があります。だから私は次のようなことをします:

NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *imageFile = [NSString stringWithFormat:@"%@/image.png", directoryPath];

if ([[NSData dataWithContentsOfFile:imageFile] isEqualToData:UIImagePNGRepresentation([imageView image])]) {
    NSLog(@"Equal");
} else {
    NSString *dataDescription = [[[NSData dataWithContentsOfFile:feltFile] description] substringToIndex:100];
    NSString *imageDescription = [[UIImagePNGRepresentation([backgroundImageView image]) description] substringToIndex:100]
    NSLog(@"Unequal: %@ %@", dataDescription, imageDescription);
}

私はそれらがPNG画像であることを知っています。印刷すると、どちらの説明もNULLになりません。しかし、それらは不平等です。

なぜこうなった?

4

2 に答える 2

5

画像の PNG 表現がビットごとに同じままであるとは期待できません。同じ画像をエンコードする方法は複数あり、エンコード間で変更できるメタデータもおそらく存在します。

代わりに、画像をピクセルごとに比較できる場合があります。UIImage のピクセル データを取得するには、以下を参照してください: UIImage (Cocoa Touch) または CGImage (Core Graphics) からピクセル データを取得する方法は?

于 2011-01-07T20:19:36.277 に答える
1

UIImagePNGRepresentation()一般的な型に依存しない形式で、画像を標準化された設定の PNG に変換します。複数の PNG ファイルで同一の画像をエンコードできます。PNG を読み込むと、関連するメタ データが失われます。このメタ データは、新しい PNG ファイルを書き出すときに (場合によっては別の方法で) 再作成されます。

何を達成しようとしているのですか?教えていただければ、問題に対するより良い解決策を提供できます。

于 2011-01-07T20:14:25.950 に答える