0

ここに、Android で回転したスケーリングされたビットマップを描画するメソッドがあります。

public void drawRotatedScaledBitmap(Bitmap b, 
        float centerX, float centerY, float width, float height, float angle)
{
    float scaleX = width / b.getWidth();
    float scaleY = height / b.getHeight();
    centerX -= (b.getWidth() * scaleX) / 2.0f;
    centerY -= (b.getHeight() * scaleY) / 2.0f;
    matrix.reset();
    matrix.setTranslate(centerX, centerY);
    matrix.postRotate(angle * (180.0f / (float)(Math.PI)),
            centerX + (b.getWidth() * scaleX) / 2.0f,
            centerY + (b.getHeight() * scaleY) / 2.0f); 
    matrix.preScale(scaleX,scaleY);
    canvas.drawBitmap(b, matrix, null);
}

float sourceX、float sourceY、float sourceW、float sourceH を取り込むようにこれを変更する方法がわかりません。

タイル セットをレンダリングしたいので、ビットマップで 64,64,64,64 と指定する必要があります。

どうすればこれを行うことができますか?

ありがとう

4

2 に答える 2

0

canvas.clipRect() を試して描画領域を指定できるかもしれません。

于 2012-11-23T02:08:22.083 に答える
0

これが私がそれを解決した方法です:

public void drawRotatedScaledBitmap(Bitmap b, 
        float centerX, float centerY, float width, float height,
        float sourceX, float sourceY, 
        float sourceWidth, float sourceHeight, float angle)
{
    float cx = centerX;
    float cy = centerY;

    dstRect.left = (int)centerX - (int)(width / 2);
    dstRect.top = (int)centerY - (int)(height / 2);
    dstRect.right = dstRect.left +  (int)width;
    dstRect.bottom = dstRect.top +  (int)height;

    srcRect.left = (int)sourceX;
    srcRect.top = (int)sourceY;
    srcRect.right = srcRect.left +  (int)sourceWidth;
    srcRect.bottom = srcRect.top +  (int)sourceHeight;

    canvas.rotate(angle * (180.0f / (float)(Math.PI)),cx,cy);
    canvas.drawBitmap(b, srcRect, dstRect, null);
    canvas.rotate(-angle * (180.0f / (float)(Math.PI)),cx,cy);
}
于 2012-11-23T04:13:08.270 に答える