首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android set联系人照片质量好,无像素化

Android set联系人照片质量好,无像素化
EN

Stack Overflow用户
提问于 2014-03-08 21:00:00
回答 1查看 1.4K关注 0票数 0

我正在开发应用程序,为社交网络中的联系人提供和设置图片,我已经知道如何设置联系人的图片,但当我以编程方式这样做时,图片以较低的质量存储。例如,这里有两个例子,第一个图片是用我的应用程序设置的,第二个是用原生android联系人应用程序设置的(源图片在两种情况下都是完全相同的):

第一个示例

使用我的应用程序:

使用原生应用程序:

第二个例子

使用我的应用程序:

使用原生应用程序:

你可以看到手和其他部位的像素化。

我用来设置联系人图片的代码:

代码语言:javascript
复制
public static boolean setContactPhoto(long contactId, byte[] photo) {
    ContentResolver cr = context.getContentResolver();
    ContentValues values = new ContentValues();
    long photoId = -1;
    long rawContactId = -1;
    Cursor rawContactsCursor = cr.query(
            ContactsContract.RawContacts.CONTENT_URI,
            new String[]{ContactsContract.RawContacts._ID},
            String.format("%s=%d", ContactsContract.RawContacts.CONTACT_ID, contactId),
            null,
            null
    );
    while (rawContactsCursor.moveToNext()) {
        rawContactId = rawContactsCursor.getLong(rawContactsCursor.getColumnIndex(ContactsContract.RawContacts._ID));
        String where = String.format(
                "%s=%d AND %s=='%s'",
                ContactsContract.Data.RAW_CONTACT_ID,
                rawContactId,
                ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
        );
        Cursor dataCursor = cr.query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data._ID},
                where,
                null,
                null
        );
        if (dataCursor.moveToFirst()) {
            photoId = dataCursor.getLong(dataCursor.getColumnIndex(ContactsContract.Data._ID));
            dataCursor.close();
            break;
        }
        dataCursor.close();
    }
    rawContactsCursor.close();

    if (rawContactId < 0) return false;

    values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
    values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
    values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);

    if (photoId < 0) {
        return cr.insert(ContactsContract.Data.CONTENT_URI, values) != null;
    } else {
        return cr.update(ContactsContract.Data.CONTENT_URI, values, String.format("%s=%d", ContactsContract.Data._ID, photoId), null) == 1;
    }
}

我的手机有540x960的分辨率,所以源图片是960x960,这很奇怪,但如果我尝试设置540x960的图片,它会从四面八方被裁剪并放大,所以像素化更大。

那么,如何通过编程来避免这种像素化设置联系人图片呢?

EN

回答 1

Stack Overflow用户

发布于 2014-03-08 21:42:38

documentation中所述,.photo字段保存“原始联系人的缩略图照片”。

我认为你必须将PHOTO_FILE_ID设置为“通过照片文件ID访问全尺寸照片”。

请参阅相关ContactsContract.DisplayPhoto

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22269628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档