其中设置和读取联系人头像有两种方法
1、通过系统方法设置
其中要有2个参数 1、UIImage 2、联系人电话号码
extern "C" ABRecordRef ABCFindPersonMatchingPhoneNumber(ABAddressBookRef addressBook,Nsstring *phoneNumber,int,int);
ABAddressBookRef addressbook = ABAddressBookCreate();
ABRecordRef ref1 = ABCFindPersonMatchingPhoneNumber(addressbook,pn,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;
}
总结以上是内存溢出为你收集整理的设置、读取联络人头像 ---- save UIImage to ABAddressBook全部内容,希望文章能够帮你解决设置、读取联络人头像 ---- save UIImage to ABAddressBook所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)