2017-09-16 3 views
-1

私はアンドロイド用のピクセルゲームを作っています。 32x32の画像を使用しています。画面の大きさに関係なくゲームを同じように見せるために、画像を動的に拡大します。小さなビットマップピクセルを完全に拡大する

6 tiles, just before the black edges there is an unwanted shadowy line (presumably the average of the black and the redish color)

6タイル、もともとは32×32:私の問題は、スケールアップ時に、画像の一部が元の色を保持していないということです。ご覧のように、黒い辺の直前には、望ましくない影のある線(おそらく黒と灰色の色の平均)があります。あなたは、私は、フィルタを使用していない見ることができるように

public abstract class Drawable { 
    protected int x; 
    protected int y; 
    protected Bitmap image; 

    Drawable(Bitmap image, int x, int y, float scale) { 
     this.x = x; 
     this.y = y; 
     this.image = Bitmap.createScaledBitmap(image, (int)(image.getWidth()*scale), (int)(image.getHeight()*scale), false); 
    } 

    abstract void draw(Canvas canvas); 
} 

これは私がスケーリングのために使用するコードです。これにより、エッジ領域がぼやけてしまいます。スケールアップしたときに真に使うべき場所とは対照的に、実際に画像の鮮明さを維持する別のフィルターがありますか?

は編集:私は今、代わりにこの方法を試してみました

scaledRect = new RectF(x, y, x+image.getWidth()*scale, y+image.getHeight()*scale); 
    paint = new Paint(); 
    paint.setAntiAlias(false); 
    paint.setDither(false); 
    paint.setFilterBitmap(false); 

そしてドローコールで

:なし成功を収めて

canvas.drawBitmap(this.image, null, scaledRect, paint); 

...

+0

ビットマップのスケールアップがぼやけて副作用を持つことになります。おそらくベクトルグラフィックがあなたが探しているものです。 https://developer.android.com/guide/topics/graphics/vector-drawable-resources.html –

+0

ベクターグラフィックスを使ってピクセルアートを作ったことは一度もありませんが、私はそれをチェックします。 –

答えて

1

Androidは、ビットマップを処理デフォルトで双線形補間アルゴリズムでスケーリングします。あなたがしようとしているのは最近隣の補間です。

Paintを作るcreateScaledBitmapで描き、これを試していない、ディザとアンチエイリアスをオフにします。

paint.setDither(false); 
paint.setAntiAlias(false); 

canvas.drawBitmap(bitmap, null, new RectF(left, top, width, height), paint); 
+0

ありがとうございますが、私はまだ同じ問題が発生します... –

+0

'paint.setFilterBitmap(false);'を追加してみてください – shiftpsh

+0

私の編集でわかるように私はそれを使用しました。 –

関連する問題