【问题标题】:How can I display scaled images without losing clarity?如何在不丢失清晰度的情况下显示缩放图像?
【发布时间】:2011-12-06 08:50:29
【问题描述】:

我必须为我的 ListView 显示小缩略图,并在详细信息屏幕上显示完整图像。

我在两种布局中使用相同的图像。这是我的列表项<ImageView>

<ImageView android:layout_height="50dip"                             
    android:layout_width="50dip" 
    android:id="@+id/item_view_img" 
    android:scaleType="fitXY">
</ImageView>

这是我的详细视图&lt;ImageView&gt;

<ImageView android:id="@+id/update_details_img"
    android:layout_width="289dip" android:layout_height="206dip"
    android:src="@drawable/q_silhouette" android:paddingTop="10dp"
    android:scaleType="fitXY" android:gravity="center">                                     
</ImageView>

原始图像大小约为 300x360。我的两个图像显示都不好看。 如何在不丢失清晰度的情况下显示这些图像?

【问题讨论】:

    标签: android image-scaling android-imageview


    【解决方案1】:

    由于您要使用这些不同的 ImageView 更改比率,您可能希望使用 centerInsidecenterCrop 进行缩放。

    【讨论】:

      【解决方案2】:

      这个问题与其说是一个 Android 问题,不如说是一个 2D 图形问题。目前有许多图形专家试图解决您遇到的确切问题。

      在不损失原始保真度的情况下更改图像尺寸是不可能的。真正的问题是,保真度的损失是否会导致清晰度的损失。大多数情况下,答案是保真度下降,清晰度也会下降。不过,有很多方法可以缓解这种情况。

      作为一般经验法则,您可以将图像缩小到原始大小的 1/2 左右,而不会出现伪影。完成此操作后,您通常可能会根据图像的复杂程度(颜色数量)再次缩小尺寸。

      或者,您可以将图像放大到原始图像的大约 1.75。您几乎永远无法通过再次升迁来欺骗系统。

      但是,如果您更改纵横比,所有赌注都将取消。这是因为它会以其他方式扭曲图像。在 Android 中,您可以通过将 scaleType 属性设置为 centerInside 值来避免更改 XML 中的纵横比。这将有很大帮助并将图像保持在范围内。您应该特别为您的缩略图ImageView 执行此操作,除非您要将其设置为与详细的ImageView 相同的纵横比。

      【讨论】:

      • 嗨@Fuzzical Logic,我已将centerInside 添加到我的&lt;ImageView&gt;。但图像没有显示在提到的宽度(289dip),高度(206dip)..它显示得非常小......&lt;ImageView android:id="@+id/update_details_img" android:layout_width="289dip" android:layout_height="206dip" android:src="@drawable/q_silhouette" android:paddingTop="10dp" android:scaleType="centerInside" android:gravity="center"&gt; &lt;/ImageView&gt;
      • 然而,原件是 300 x 360?显示的实际尺寸是多少?你能做到吗?
      • 这次我的图像实际尺寸是 800x600.. 仍然以小尺寸显示.. 即使在我的布局中使用 android:layout_width="800dip" android:layout_height="600dip".. 边距尺寸正在增加,但图像仍然显示非常小。好像是 50x50。
      • 在 800 x 600 时,您的 50x50dip 会使它变得非常小。您的 289x206 应该有顶部和底部边距,但应该可以查看。这里正在发生其他事情。导致问题的不是“centerInside”,而是与图像相关的其他东西。 centerInside 只是根据容器的最小相对尺寸缩小图像。
      • 如果它显示的是您的 50x50 缩略图,那么您必须使用对调整后的 50x50 图像的引用,而不是使用新尺寸重新加载图像。您必须查看代码。
      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多