设置、读取联络人头像 ---- 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); 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- React TypeScript应用程序获取’TS2304:找不到名称’文本’
- cocos2dx 使用Luajit将Lua脚本编译为bytecode,从而实现加密
- flash TweenLite onComplete 提前执行的问题
- Visual studio 2017如何发布dotnet core到docker
- ios – 使用具有魔法记录的多个键排序时未找到Keypath
- cocos2d 知识和技巧
- 利用正则表达式实现去除所有HTML标签代码
- c# – Application.Current“null”在控制台应用程序中
- 正则表达式 – 当存在多个/不完整匹配时’grep -w -f’的行
- 为什么选择PostgreSQL而不是MySQL