Android:尝试设置为 ImageView 时,联系人照片像素化

Posted

技术标签:

【中文标题】Android:尝试设置为 ImageView 时,联系人照片像素化【英文标题】:Android: Contact photo is pixelated while trying to set into an ImageView 【发布时间】:2016-02-19 18:22:12 【问题描述】:

我正在尝试获取电话联系人图像并设置为 ImageView 。我正在获取图像,但是当我尝试将图像设置为 ImageView 时,它被像素化了。

获取图片的代码

    String select = "(" + ContactsContract.Contacts.DISPLAY_NAME + " == \"" + name + "\" )";
        Cursor c = getApplicationContext().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
        startManagingCursor(c);

        if (c.moveToNext()) 
             idValue = c.getString(0);
        InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(getApplicationContext().getContentResolver(),
                            ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(idValue)));

  if (inputStream != null) 
      photo = BitmapFactory.decodeStream(inputStream);
      contact_image.setImageBitmap(photo);
     
    

我想显示联系人的详细信息,因此我尝试按名称获取联系人 ID。

Layout.xml

<ImageView
            android:id="@+id/contact_image"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:scaleType="centerCrop"
            android:src="@drawable/un_known_avtar" />

我尝试了几乎所有的 xml 比例类型。但联系人图像仍然被拉伸。

任何人都可以帮助避免联系人图像的拉伸

【问题讨论】:

可以加截图吗? @Awais King 我刚刚添加了截图,你可以检查一下 是因为一些低端的安卓设备因为内存的原因,会以低分辨率保存联系人的图片,所以当你在检索后尝试拉伸时,图片的边缘会出现很多噪点或变得模糊跨度> 不,我用的是小米,它有 1 GB 内存,运行 4.4 版本。在默认呼叫屏幕中,联系人照片显示在呼叫背景中,并且没有像素化。刚才我尝试将图像从厨房设置到 imageView 中。当时图像也没有像素化。当我尝试通过 isung conatct id 从联系人中获取图像时,只有图像被像素化@Awais King 您是用同一个设备拍摄联系人的照片,还是已经设置好? 【参考方案1】:

尝试在openContactPhotoInputStream 末尾添加 true 布尔值以获得高分辨率(需要 API 级别 14 或更高)

InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(getApplicationContext().getContentResolver(),
ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(idValue)), true);

来源:Large Photo Version from contacts in android

【讨论】:

谢谢,低版本怎么办@Awais King 我不认为你可以在较低的 API 中做到这一点,因为 Contacts.Photo.DISPLAY_PHOTO 仅在 14+ API 中可用 好的,谢谢@Awais King

以上是关于Android:尝试设置为 ImageView 时,联系人照片像素化的主要内容,如果未能解决你的问题,请参考以下文章

在android 5上设置ImageView colorFilter(api 21)

Android - 将ImageView设置为URL

android:将灰度过滤器设置为imageView

当我将 ImageView 的可见性设置为线性布局消失时,它的一个孩子仍然存在,另一个在 android 中消失了

在android中将drawable设置为浮动操作按钮ImageView

Android:从位图裁剪位图并设置为 ImageView src