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

ビットマップを縮小している場所がわかりません。高解像度のビットマップをより小さなサイズの ImageView に詰め込もうとしていると思います。

ビットマップのスケーリングに関するドキュメントを次に示します。説明されている手法は、オンザフライでビットマップをスケーリングする場合にもうまく機能します。

于 2013-01-18T16:15:57.210 に答える
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 に答える