2011-01-07 4 views
2

ファイルシステムから透明度のある画像をいくつか表示して、UIImageViewビューにします。私の目的のためには、UIImageViewのイメージとファイルシステムのファイルを比較する必要があります。だから私は次のようなことをする:別のバイトを返すUIImagePNGRepresentation()

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になりません。しかし、彼らは不平等です。

どうしてですか?

答えて

5

同じビットビットのイメージのPNG表現にはカウントできません。同じイメージをエンコードするには複数の方法があり、おそらくエンコード間で変更できるメタデータもあります。

代わりに、ピクセルごとに画像を比較することができます。 UIImageのピクセルデータを取得するには、以下を参照してください。How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?

+0

ダニエルありがとう! –

1

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

達成しようとしていることは何ですか?私たちに教えてください。私たちはあなたにあなたの問題に対するよりよい解決策を与えることができます。

+0

お返事ありがとうございます。私は何をしようとしているのです:私はmd5ハッシュで格納されているリソースのリストを持っており、このハッシュに基づいて選択されたイメージを調べる必要があります。私が使用するmd5メソッドは 'NSData'オブジェクトを必要とします。したがって、問題:NSDataがハッシュ値と等しくない場合、相応に異なっており、一致するリソースが見つかりません。 –

+2

詳しいことはできますか?それだけに基づいて、新しいイメージを書くことはリソース集約的であり、正しい答えをめざすことはめったにないので、リソースをどのように見直すか再考する必要があります。 –

+0

ありがとうジョナサン - 私は新しいイメージを書き出すのではなく、現在のイメージを探していました。私はあなたの答えに基づいて考えるとダニエル私は(別の)配列で私が見ることができるイメージのハッシュを格納する必要があります。 –