0

これを行ういくつかの方法を検索して試しましたが、うまくいきません。次のコードは醜い結果を生成します。作成されたビットマップには、複数のアイコンからのエッジが含まれます。たとえば、他のアイコンの上部 10%、左 10%、ターゲット アイコンの 80% などです。しかし、最初のビットマップ (x=0、y=0 で作成されたもの) は完璧ですが、残りはそうではありません。

ここで何が間違っているのか教えてください。乾杯!

private Bitmap[][]  createIcons(Bitmap sprite_sheet, int rows, int cols)
{
    Bitmap[][] iconBox_TMP = new Bitmap[20][20];
    int width   = sprite_sheet.getWidth()   / cols;
    int height  = sprite_sheet.getHeight()  / rows;

    try{


        for (int i=0; i<rows; i += 1) 
        {

            for (int j=0; j<cols; j += 1) 
            {

                /*
                            //same result with matrix
                Matrix matrix = new Matrix();
                matrix.postScale(1.0f, 1.0f);
                    iconBox_TMP[i][j] = Bitmap.createBitmap(
                            sprite_sheet, 
                            j*width, 
                            i*height, 
                            width, 
                            height, 
                            matrix, 
                            true);
                    matrix.reset();
                    matrix = null;
                    */

                    iconBox_TMP[i][j] = Bitmap.createBitmap(sprite_sheet,
                    width * j, 
                    height * i, 
                    width, 
                    height);

                    Log.d("createIcons()", "(" + i + "," + j + ") X: " + j*width + ", Y: " + (i*height) + ", W: " + width + ", H: " + height);

            }

        }   


    }catch(Exception e){}

    return iconBox_TMP;
}

編集:

LogCat の出力は次のとおりです。

02-10 04:41:01.281: D/createIcons()(4961): (0,0) X: 0, Y: 0, W: 79, H: 79
02-10 04:41:01.281: D/createIcons()(4961): (0,1) X: 79, Y: 0, W: 79, H: 79
02-10 04:41:01.281: D/createIcons()(4961): (0,2) X: 158, Y: 0, W: 79, H: 79
02-10 04:41:01.281: D/createIcons()(4961): (0,3) X: 237, Y: 0, W: 79, H: 79
02-10 04:41:01.281: D/createIcons()(4961): (0,4) X: 316, Y: 0, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (0,5) X: 395, Y: 0, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (0,6) X: 474, Y: 0, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (0,7) X: 553, Y: 0, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (0,8) X: 632, Y: 0, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (0,9) X: 711, Y: 0, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (1,0) X: 0, Y: 79, W: 79, H: 79
02-10 04:41:01.285: D/createIcons()(4961): (1,1) X: 79, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,2) X: 158, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,3) X: 237, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,4) X: 316, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,5) X: 395, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,6) X: 474, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,7) X: 553, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,8) X: 632, Y: 79, W: 79, H: 79
02-10 04:41:01.289: D/createIcons()(4961): (1,9) X: 711, Y: 79, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,0) X: 0, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,1) X: 79, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,2) X: 158, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,3) X: 237, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,4) X: 316, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,5) X: 395, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,6) X: 474, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,7) X: 553, Y: 158, W: 79, H: 79
02-10 04:41:01.292: D/createIcons()(4961): (2,8) X: 632, Y: 158, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (2,9) X: 711, Y: 158, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,0) X: 0, Y: 237, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,1) X: 79, Y: 237, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,2) X: 158, Y: 237, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,3) X: 237, Y: 237, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,4) X: 316, Y: 237, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,5) X: 395, Y: 237, W: 79, H: 79
02-10 04:41:01.296: D/createIcons()(4961): (3,6) X: 474, Y: 237, W: 79, H: 79
02-10 04:41:01.300: D/createIcons()(4961): (3,7) X: 553, Y: 237, W: 79, H: 79
02-10 04:41:01.324: D/createIcons()(4961): (3,8) X: 632, Y: 237, W: 79, H: 79
02-10 04:41:01.324: D/createIcons()(4961): (3,9) X: 711, Y: 237, W: 79, H: 79
02-10 04:41:01.324: D/createIcons()(4961): (4,0) X: 0, Y: 316, W: 79, H: 79
02-10 04:41:01.324: D/createIcons()(4961): (4,1) X: 79, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,2) X: 158, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,3) X: 237, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,4) X: 316, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,5) X: 395, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,6) X: 474, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,7) X: 553, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,8) X: 632, Y: 316, W: 79, H: 79
02-10 04:41:01.328: D/createIcons()(4961): (4,9) X: 711, Y: 316, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,0) X: 0, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,1) X: 79, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,2) X: 158, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,3) X: 237, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,4) X: 316, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,5) X: 395, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,6) X: 474, Y: 395, W: 79, H: 79
02-10 04:41:01.332: D/createIcons()(4961): (5,7) X: 553, Y: 395, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (5,8) X: 632, Y: 395, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (5,9) X: 711, Y: 395, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (6,0) X: 0, Y: 474, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (6,1) X: 79, Y: 474, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (6,2) X: 158, Y: 474, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (6,3) X: 237, Y: 474, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (6,4) X: 316, Y: 474, W: 79, H: 79
02-10 04:41:01.335: D/createIcons()(4961): (6,5) X: 395, Y: 474, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (6,6) X: 474, Y: 474, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (6,7) X: 553, Y: 474, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (6,8) X: 632, Y: 474, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (6,9) X: 711, Y: 474, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (7,0) X: 0, Y: 553, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (7,1) X: 79, Y: 553, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (7,2) X: 158, Y: 553, W: 79, H: 79
02-10 04:41:01.339: D/createIcons()(4961): (7,3) X: 237, Y: 553, W: 79, H: 79
02-10 04:41:01.343: D/createIcons()(4961): (7,4) X: 316, Y: 553, W: 79, H: 79
02-10 04:41:01.343: D/createIcons()(4961): (7,5) X: 395, Y: 553, W: 79, H: 79
02-10 04:41:01.343: D/createIcons()(4961): (7,6) X: 474, Y: 553, W: 79, H: 79
02-10 04:41:01.343: D/createIcons()(4961): (7,7) X: 553, Y: 553, W: 79, H: 79
02-10 04:41:01.343: D/createIcons()(4961): (7,8) X: 632, Y: 553, W: 79, H: 79
02-10 04:41:01.343: D/createIcons()(4961): (7,9) X: 711, Y: 553, W: 79, H: 79
4

1 に答える 1

1

元のスプライト シートでは、各セルは 53x53 である必要があるため、これは丸め誤差です。ただし、ビットマップをロードすると、デバイスの解像度 (hdpi) に合わせてビットマップが大きくなります。

mdpi から hdpi に変換すると、ビットマップは 50% 拡大し、セルの幅は 79.5 ピクセルになります。しかしもちろん、この数値は 79 ピクセルに切り捨てられるため、一部のスプライトではオフセット エラーが発生します。

スプライト シートがリソースの場合は、735x636 ピクセルの hdpi バージョンを提供する必要があります。そうすれば、変換を自分で制御できるようになります (そして、735 が 10 の倍数ではないことがわかるので、これらの寸法を少し変更したくなるかもしれません)。

于 2013-02-10T20:37:47.673 に答える