2010-01-18 9 views

cevap

42

.... person tip ABRecordRef taşımaktadır

NSData *imgData = (NSData *)ABPersonCopyImageData(person); 

UIImage *img = [UIImage imageWithData:imgData]; 

. Şimdi, CFData ve NSData köprüsüz köprüler olduğundan CFData'u NSData'a yazıp görüntüyü

alabilirsiniz.

+0

sadece bir not. Düzeltdim –

+0

Lütfen bunun resmin kırpılmış sürümü olmadığından kullanıcıların beklediği resim olmayabilir. Bkz. [ChangUZ'un cevabı] (http://stackoverflow.com/a/6953492/784318) – Besi

+0

@Besi Ancak, herhangi bir görüntü formatından söz etmek, tablo görünümünde hücrelerdeki görüntüleri doldururken olduğu gibi, görüntü görünümünü aksesuar görünümü olarak kullanıyoruz. , görüntüyü otomatik olarak yeniden boyutlandırdığı ve her görüntüyü benzersiz biçimde (aynı boyutlarda) ayarladığı için :) –

12
(NSData*)ABPersonCopyImageDataWithFormat([targetPeople objectAtIndex:index], kABPersonImageFormatThumbnail) 

Küçük resim döndürdüğü için bu daha hızlıdır.

+0

+1, çünkü bir küçük resim olmasının yanı sıra, kişinin imajının kırpılmış olması olabilir, bu yüzden ChangUZ'un yaklaşımı, adres defterinde gösterilen aynı görüntüyü döndürür. – Besi

+2

Ancak bu yöntem iOS 4.1'den edinilebilir. – rowwingman

0

Biraz tazelenmiş kodu: ": imgData imageWithData" kod parçacığı son satırında: "imgData imgaeWithData" okumak gerektiğini

UIImage *image = nil; 

@try 
{ 
    CFDataRef cfImage = ABPersonCopyImageData(person); 
    // or CFDataRef cfImage = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail); 
    if (cfImage) 
    { 
     image = [UIImage imageWithData:(__bridge NSData*)cfImage]; 
     CFRelease(cfImage); 
    } 
} 
@catch (NSException *exception) 
{ 
    //... 
} 
İlgili konular