5

ビットマップを販売して、各ステップで翻訳しようとしています。

次のコードを見ると、画像を描画し、変換してスケーリングし、同じ操作を逆に実行して元の構成に戻しています。しかし、操作を適用した後、元のスケーリングされた画像 (倍率 1) が得られますが、画像は別の位置に変換されます。

正しい方法を教えてください。(上記の例では、元の構成に到達するにはどうすればよいですか?)

 protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Matrix matrix = new Matrix();

        scale = (float)screenWidth/201.0f;
        matrix.setTranslate(-40, -40);
        matrix.setScale(scale, scale);

        canvas.drawBitmap(bitMap, matrix, paint);

        //back to original
        canvas.drawColor(0, Mode.CLEAR);
        matrix.setScale(1.0f/scale, 1.0f/scale);
        matrix.setTranslate(40,40);
        canvas.drawBitmap(bitMap, matrix, paint);

    }
4

2 に答える 2

6

Canvasスケーリングと変換のメソッドを使用するだけで、save()restore()API を利用して必要なことを行うことができます。例えば:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //Save the current state of the canvas
    canvas.save();

    scale = (float) screenWidth / 201.0f;

    canvas.translate(-40, -40);
    canvas.scale(scale, scale);
    canvas.drawBitmap(bitMap, 0, 0, paint);

    //Restore back to the state it was when last saved
    canvas.restore();

    canvas.drawColor(0, Mode.CLEAR);
    canvas.drawBitmap(bitMap, 0, 0, paint);
}
于 2013-09-10T01:24:28.510 に答える
1

元のコードの問題は、スケーリングと変換がスケーリング/変換するポイントを使用する方法が原因である可能性があると思います。操作の間/操作に対して正しいピボットポイントを指定すれば、問題はありません。

于 2014-03-09T20:37:33.003 に答える