1

我正在尝试在 Android 上的 ImageView 中缩放图像,但无论我尝试什么设置,按比例缩小的图像总是看起来很难看。这是我的代码生成的图像:

http://i.imgur.com/4yubR.png?1

左边的图像是在我的台式计算机上使用 ImageMagick 预先缩放的。ImageView 显示此图像没有问题。右边的图像是由 ImageView 实际缩放的图像,您可以清楚地看到,它看起来很丑:/

生成上述两个图像的代码如下:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    RelativeLayout body = new RelativeLayout(this);

    for(int i = 0; i < 2; ++i)
    {
        ImageView iv;

        iv = new ImageView(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(34, 34);
        params.leftMargin = i*50;
        body.addView(iv, params);

        AssetManager am = this.getAssets();

        try
        {
            BufferedInputStream buf;
            if(i == 0)
                buf = new BufferedInputStream(am.open("images/search_34x34.png"));
            else
                buf = new BufferedInputStream(am.open("images/search.png"));

            Bitmap bitmap = BitmapFactory.decodeStream(buf);
            BitmapDrawable bd = new BitmapDrawable(bitmap);
            bd.setAntiAlias(true);
            iv.setImageDrawable(bd);
            buf.close();
        }
        catch(java.io.IOException e)
        {
        }
    }

    setContentView(body);
}

如果我遗漏了什么,请告诉我。我简直不敢相信 Android 会如此糟糕地缩放图像(实际上,我很难相信这是默认行为)。

另请注意,我不想预先缩放图像,因为我的应用程序必须处理来自未知来源的图像,所以我必须即时缩放。

4

2 回答 2

0

也许您必须在您的 xml 布局中设置 scaleType。例如

     <ImageView
          android:scaleType="center"
       </ImageView>

有以下 scaleTypes:

  1. 中央
  2. CENTER_CROP
  3. CENTER_INSIDE
  4. FIT_CENTER
  5. FIT_END
  6. FIT_START
  7. FIT_XY
  8. 矩阵

你可以在这里看到:

http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

编辑

尝试了一些东西,现在即使使用其他照片我也得到了相同的结果。我认识到,当我缩小手机内的图像时,一切看起来都很好。例如,我使用了一个 120x120 dp 的 imageView 和一个 300x300px 的资源。如果我在平板电脑上使用相同的imageView,即使是120x120,同样大小的资源图片,看起来很糟糕。我认为摆脱这种情况的唯一方法是将应用程序外部的图像缩放到所需的大小,然后再将其设置为您的项目。例如,如果您使用 200x200dp 的 imageView,请将图像缩放到接近此大小。如果您支持多种屏幕尺寸,并将平板电脑的此 imageView 的尺寸设置为 500x500dp,请将您的图像缩放到此尺寸附近。当然,这只有在你得到一个比最大的 imageView 分辨率更高的图像时才会奏效。

于 2013-01-18T14:48:43.263 回答
0

我看不到你在哪里缩小你的位图。我认为您正试图将高分辨率位图塞入尺寸较小的 ImageView 中。

这是有关缩放位图的文档。所描述的技术也适用于动态缩放位图。

于 2013-01-18T16:15:57.210 回答