2011-12-04 27 views
3

サイズが960x800の画像があり、画面に表示させようとしています。アンドロイドで縮尺ビットマップを作成するときの画質を維持する

私が現在やっている方法は、完全な960x800ビットマップをロードし、ソースと宛先Rectオブジェクトを使用することです。これまでの例では、宛先の四角形は480x320(私の画面の大きさ)であり、ソース四角形は960x800になります。

background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null); 
destRect = new Rect(0,0, screenWidth, screenHeight); 
sourceRect = new Rect(0,0, background.getWidth(), background.getHeight()); 
... 
c.drawBitmap(background, sourceRect, destRect, backgroundPaint); 

私はその後、Paintオブジェクトを使用してキャンバスに背景をしようとしたときのディザtrueに設定した場合、画像は絶対に完璧に見えます。

Paint backgroundPaint = new Paint(); 
backgroundPaint .setDither(true); 

これはあまり効率的ではない可能性があり、各描画呼び出しで不必要な作業が行われると結論づけました。

background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null); 
background = Bitmap.createScaledBitmap(background, display.getWidth(), display.getHeight(), true); 

は、これにより任意のRectオブジェクトの必要性をelminating、すでにサイズのビットマップを作成:これに対抗するために、私は次のことを試してみてやりたいです。しかし、これを行うとき、私は上記の方法でできる限り同じ画質を維持できません。実際には、前述の方法でPaintオブジェクトを使用しないと見える画像に似ています。スケーリングされたビットマップ上のペイントオブジェクトを使用しても一見効果はありません。

は私のイメージはどのように見えるかの例を与えるために、それは this絵(のように厳しくないalthought)に似て

は、私は同じ画像品質を得るために行うことができるものはありますか?

答えて

0

これは、あなたのイメージは、幅140nyourの高さになりたい場合は、自動的に

Bitmap originalBitmap = BitmapFactory.decodeFile(getResources(), R.drawable.background, null); 
    Bitmap bitmap=originalBitmap; 
    if (bitmap !=null) { 
     int h = bitmap.getHeight(); 
     int w = bitmap.getWidth(); 
     h = 140*h/w; 
     w = 140; 
     bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true); 
     setIconImage(bitmap); 
    } 
リサイズされます条件であります
関連する問題