在画布上反转绘制位图

时间:2012-08-07 19:28:25

标签: android android-canvas

如何将绘制的图像反转为画布?

我有以下内容:

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

如何将当前图像在x轴上绘制成currentBounds()?

我已经找到了一些表明Matrix使用情况的答案,但我不知道是否有更简单的方法?这样的油漆带有一些旗帜。

编辑:

以下是我尝试使用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(),我做错了什么?

3 个答案:

答案 0 :(得分:0)

使用

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

正如我自己的回答here所述。

虽然,我会指出,你需要花一点时间来理解矩阵,它会让你成为一个更好的Android程序员。

答案 1 :(得分:0)

使用它。我觉得这很容易。

        canvas.save();
        canvas.rotate(180, x, y);
        canvas.drawBitmap(bitmap, x, y, null);
        canvas.restore();

答案 2 :(得分: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”看起来并不正确