如何在不失去清晰度的情况下显示缩放图像?

时间:2011-10-12 18:08:53

标签: android image-scaling android-imageview

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

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

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

以下是我的详细视图<ImageView>

<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。我的图像显示都不好看。 如何在不失去清晰度的情况下显示这些图像?

2 个答案:

答案 0 :(得分:2)

这个问题不是Android问题,而是2D图形问题。目前有许多图形专家试图解决你遇到的确切问题。

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

作为一般经验法则,您可以将图像尺寸缩小到原始尺寸的1/2,而不会产生伪影。完成此操作后,您可能会经常缩小一次,具体取决于图像的复杂程度(颜色数量)。

或者,您可以将图像升迁到原始图像的大约1.75。你几乎不会再通过升级来欺骗系统。

但是,如果更改宽高比,所有投注均已关闭。这是因为它会以其他方式扭曲图像。在Android中,您可以通过将scaleType属性设置为centerInside值来避免更改XML中的宽高比。这将有助于显着地保持图像在范围内。您应该特别针对缩略图ImageView执行此操作,除非您要使用与详细ImageView相同的宽高比进行设置。

答案 1 :(得分:1)

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