2010-11-18 71 views
0

我在網上搜索,沒有找到答案,所以我想我在這裏給它最後一個鏡頭。 在我的應用程序中,用戶可以從照片庫中選擇圖像。我不希望用戶能夠選擇相同的圖片兩次,因此我正在尋找一種方法來識別圖像並將其與已經選擇的圖像進行比較。據我所知,無法從庫中獲取圖像URL或任何其他標識符,因此我有點卡住了。我想到的一種(也許)可能的方式是比較MD5-Checksum,但我認爲這是很昂貴的。如何唯一標識由UIImagePicker選擇的圖像?

非常感謝您的幫助,請原諒我生疏的英語。

Muckz

回答

-1

如果你有一個指針的ImageView然後一個非常快速和廉價的這樣做的廉價的方式將設置UIImageView 1的.tag其被選中時,然後用if(UIImageView.tag)

檢查
+0

哇,那很快;-)但是我想你誤解了我,對不起,我沒有說清楚。沒關係,用戶選擇多個圖像,但我不希望他能夠兩次選擇相同的圖像。多一點背景:所有選擇的圖像都被添加到列表中,後來得到處理,我不希望圖像出現在列表中兩次。 – muckz 2010-11-18 17:04:21

0

如果使用UIImagePickerControllerDelegate協議,則有一種方法imagePickerController:didFinishPickingMediaWithInfo:。當這個方法被調用時,將info NSDictionary存儲在一個數組中(可能在你的App Delegate中)。如果選擇了另一張圖像,請將所選的NSDictionary與之前使用isEqualToDictionary:存儲的NSDictionary進行比較。 沒有兩個圖像將具有相同的元數據。 (元數據是僅適用於新捕獲的媒體。)

+0

我一直認爲元數據只提供給視頻,而不是圖像。這應該從iPhone SDK 3.2向上工作? – muckz 2010-11-18 17:10:32

+0

你是對的。不過,比較字典仍然有效。 – 2010-11-18 17:16:02

0

把你的圖片變成一個NSMutableArray那麼當用戶選擇另一個時間檢查,如果選擇到陣列中...

+0

因此,可以比較兩個圖像到每個?我沒有想到... – muckz 2010-11-18 17:11:11

+0

看到KingofBliss的回答它更好 – 2010-11-19 09:04:25

2

使用imagePickerController委託。這裏是一個示例代碼,

-(void) imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

UIImage *image=[[UIImage alloc] init]; 
image=[info objectForKey:UIImagePickerControllerOriginalImage]; 
//store the image 
//comparision code 

} 
1

除非實際上非常慢,否則MD5-Checksums可能是最好的方法。這樣你就不需要記憶所有先前選擇的圖像以便能夠比較。你只需要保持其校驗和。

另一種可能性是隨機選擇幾個像素並保存其位置和顏色值。然後,當選擇一個新的圖片時,您可以驗證之前保存的像素/顏色不匹配。這種方法可能會失敗,但它可能足夠快速。