0

如何反转绘制到画布中的图像?

我有以下内容:

        canvas.save();
        canvas.drawBitmap(image.current(), null, currentBounds(), Paints.BLANK);
        canvas.restore();

如何使当前图像在 x 轴上翻转到 currentBounds() 中?

我已经找到了一些表明使用 Matrix 的答案,但我想知道是否有更简单的方法?这样一个打开了一些标志的油漆。

编辑:

以下是我对矩阵转换的尝试:

    Rect currentBounds = currentBounds();


    currentBounds.offset((int)offset.x(), (int)offset.y());

    float scale = image.current().getWidth() / currentBounds.width();

    Matrix matrix = new Matrix();
    matrix.setScale(- scale - 1, scale + 1);
    matrix.postTranslate(currentBounds.left, currentBounds.top);

    canvas.drawBitmap(image.current(), matrix, Paints.BLANK);
    canvas.drawRect(currentBounds, Paints.STROKE_BLUE);

本次抽签结果如下:

https://dl.dropbox.com/u/28683814/game.png

可以看出,精灵是从 0,0 向左绘制的,它没有完全完成 currentBounds(),我做错了什么?

4

3 回答 3

0

利用

canvas.scale(-1,0,width/2,height/2);

正如我自己在这里的回答所提到的。

不过,我要指出的是,你需要大约一分钟时间来理解矩阵,它会让你成为一个更好的 Android 程序员。

于 2012-08-07T19:43:27.453 回答
0

好吧,我这样解决了:

    Rect currentBounds = currentBounds();
    currentBounds.offset((int)offset.x(), (int)offset.y());

    float scale = (float) currentBounds.width() / (float) image.current().getWidth();

    boolean leftMovement = movingLeft();

    Matrix matrix = new Matrix();
    matrix.setScale(leftMovement ? -scale : scale, scale);
    matrix.postTranslate(leftMovement ? currentBounds.right : currentBounds.left, currentBounds.top);

    canvas.drawBitmap(image.current(), matrix, Paints.BLANK);

但是这个“leftMovement?currentBounds.right:currentBounds.left”看起来不正确

于 2012-08-07T23:39:46.473 回答
0

用这个。我认为这很容易。

        canvas.save();
        canvas.rotate(180, x, y);
        canvas.drawBitmap(bitmap, x, y, null);
        canvas.restore();
于 2012-08-07T19:59:00.983 回答