【问题标题】:Android: Contact photo is pixelated while trying to set into an ImageViewAndroid:尝试设置为 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_width="fill_parent"
            android:layout_height="match_parent"
            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
  • 您是用同一个设备拍摄联系人的照片,还是已经设置好?

标签: android performance android-layout android-contentprovider android-contacts


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
相关资源
最近更新 更多