0

古典的なゲームを模倣したアプリを作成しています。したがって、ピクセル アートをレンダリングする必要があります。

バッファとして 100x100 ビットマップがあり、問題なくバッファにすべてを描画します。

480x480 Canvas でレンダリングしようとすると、ここで問題が発生します。

Bitmap.createScaledBitmap はぼやけたビットマップを提供するので、次のコードを使用して「ブロック (拡大されたピクセル)」間の明確なカットを行います。

float scale = getWidth() / 100f;
for(int y = 0 ; y < getHeight() ; y++){
    for(int x = 0 ; x < getWidth() ; x++){
        buffer2.setPixel(x, y, buffer.getPixel((int)(x / scale), (int)(y / scale)));
    }
}

コードは非常にうまく機能し、まさに私が望んでいたことを行いました。しかし、パフォーマンスはかなり悪いです (300 ミリ秒以上かかります)。だから、もっと良い方法がないか尋ねたくて書いています。ありがとうございました。

4

1 に答える 1

1

私はいくつかのことをします:

  1. andをローカル変数getHeight()getWidth()分割して、ループの繰り返しごとに呼び出されないようにします。(例int height = getHeight(); for(int y = 0; y < height; y++);)

  2. 中間配列を使用してピクセルを格納し、ループが完了したら、ピクセルを一度に設定するsetPixels()代わりにメソッドを使用setPixel()します。ピクセルを 1 つずつ設定するよりもはるかに効率的です。

于 2012-08-23T16:04:17.690 に答える