设置、读取联络人头像 ---- save UIImage to ABAddressBook

其中设置和读取联系人头像有两种方法

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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值