2012-01-03 9 views
1

縮尺を変更すると、何らかのタイリングが表示されます(下の画像を参照)。同じ色を持つはずの隣接するタイルより明るい画像の四角形の部分があります。それはほとんど気づいていないが、それは私のアプリのために十分ではないです。四角形のサイズは倍率に依存します。したがって、タイルは75%のサイズで小さくなります。スケーリングされた画像は、私のアプリで画像を動的に元のサイズの50%にスケーリングする何らかの種類のタイリングを示します。

例:

enter image description here

私の描画コード(私のカスタムビューのonDrawで呼ばれている):

private void drawImage(Bitmap bitmap, float scaling, 
     Canvas canvas, float offset) 
{ 

    Matrix p = new Matrix(); 
    Matrix m = new Matrix(); 
    Matrix y = new Matrix(); 
    Matrix o = new Matrix(); 

    p.setTranslate(-bitmap.getWidth()/2, -bitmap.getHeight()/2); 

    // translation to views center (minus half height of image 
    // so that the bottom of the picture is in the views center. 
    y.setTranslate(getWidth()/2, getHeight()/2); 
    // offset translation. 
    o.setTranslate(offset, 0); 

    m.setScale(scaling, scaling); 
    m.preConcat(p); 
    m.postConcat(y); 
    m.postConcat(o); 

    // draw image 
    canvas.drawBitmap(bitmap, m, null); 
} 

は、このタイリングを防止するために、どのように誰もが知っていますか?

+0

Bitmap.createScaledBitmap()を使用してビットマップを移動してスケーリングするのではなく、それが役立つかどうかを調べることができます。 – Jave

+1

ここで見たように 'canvas.drawBitmap(ビットマップ、m、新しいペイント(Paint.FILTER_BITMAP_FLAG))'を試したことがありますか?(http://stackoverflow.com/a/7468636/662732) – fab

+0

@Jave:画像は元のサイズのプリスケールの100%から50%の間で動的にスケーリングされたものは私には役に立たない。 –

答えて

1

canvas.drawBitmap(bitmap, m, new Paint(Paint.FILTER_BITMAP_FLAG))を見てみましたか?hereです。

1

デバイスまたはエミュレータで表示されますか?あるデバイスでは、いくつかの低品質GPUはGPUがないデバイスやエミュレータが生成しない「ディザリング」のようなエフェクトを導入する可能性があるためです。

解決策は、PhotoshopまたはビットマップAPIで画像をプレスケールすることです。

+0

私はAcer A500タブレットで動作しています。画像は元のサイズの100%〜50%の間で動的に拡大されるので、私にとってはプレスケールは無用です。 –

関連する問題