設定、讀取聯絡人頭像 —- save UIImage to ABAddressBook

來源:互聯網
上載者:User

其中設定和讀取連絡人頭像有兩種方法

1、通過系統方法設定

其中要有2個參數  1、UIImage 2、連絡人電話號碼 

 

extern "C" ABRecordRef ABCFindPersonMatchingPhoneNumber(ABAddressBookRef addressBook,NSString *phoneNumber,int, int);

 

 

ABAddressBookRef addressbook = ABAddressBookCreate();

 

ABRecordRef ref1 = ABCFindPersonMatchingPhoneNumber(addressbook, pn, 0, 0);

int record =  ABRecordGetRecordID(ref1);//擷取聯絡人的recordId

 

ABRecordRef  person = ABAddressBookGetPersonWithRecordID(addressbook, record);//擷取聯絡人的ABRecordRef

 

/////////////////////////////////////////////////////////////////

設定聯絡人圖片

UIImage * img = [UIImage imageNamed:@"image.png"];

NSData *dataRef = UIImagePNGRepresentation(img);

ABPersonSetImageData(person, (CFDataRef)dataRef, nil);

ABAddressBookAddRecord(addressbook, person, nil);

ABAddressBookSave(addressbook, nil);

 

CFRelease(addressbook);//create、copy、retrain對應的release

 

////////////////////////////////////////////////////////////////

讀取系統聯絡人圖片

CFDataRef dataRef = ABPersonCopyImageData(person);

UIImage *image = [UIImage imageWithData:(NSData *)dataRef];//這個就是我們要擷取的Image的值

[dataRef release];

 

 

注意:用系統方法插入的操作在資料庫中儲存的時候只會儲存縮圖的形式

相當於在資料庫中的格式format為0 fromat(分為3中 0為縮圖 1、大號縮圖 2、源圖)

 

 

///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////

使用讀取資料庫的方法來讀取 (這裡就只說讀取,具體的插入也類似)

 

#define DBNAME "/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb"

-(UIImage *) getSystemImage:(int)record_id formatImg:(int) format

{

sqlite3*m_db;

UIImage *image = nil;

int m_errno;

NSData* dataObj = nil;

m_errno=sqlite3_open(DBNAME,&m_db);

if (m_db==NULL) {

        return nil;

    }

int len;

    char *next;

sqlite3_stmt *st;

    char sql[256];

sprintf(sql,"select data from ABImage where record_id = %d and format = %d",record_id, format);

len = strlen(sql);

m_errno = sqlite3_prepare(m_db, (const char *)sql, len, &st, (const char **)&next);

if (m_errno != SQLITE_OK) 

{

        return nil;

}

m_errno = sqlite3_step(st);

if(m_errno == SQLITE_ROW)

{

int length = sqlite3_column_bytes(st, 0);

const unsigned char*pData = sqlite3_column_text(st, 0);

dataObj = [NSData dataWithBytes:pData length:length];

}

image = [UIImage imageWithData:dataObj];

sqlite3_finalize(st);

sqlite3_close(m_db);

    return image;

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.