首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >位图在画布上的逆向绘制

位图在画布上的逆向绘制
EN

Stack Overflow用户
提问于 2012-08-08 03:28:25
回答 3查看 1.9K关注 0票数 0

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

我有以下几点:

代码语言:javascript
复制
        canvas.save();
        canvas.drawBitmap(image.current(), null, currentBounds(), Paints.BLANK);
        canvas.restore();

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

我已经找到了一些关于Matrix用法的答案,但我不知道有没有更简单的方法?这样一幅画,上面还亮着一面旗帜。

编辑:

下面是我对矩阵变换的尝试:

代码语言:javascript
复制
    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(),我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-08 07:39:46

好吧,我是这样解决的:

代码语言:javascript
复制
    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“看起来不太对劲

票数 0
EN

Stack Overflow用户

发布于 2012-08-08 03:43:27

使用

代码语言:javascript
复制
canvas.scale(-1,0,width/2,height/2);

正如我自己的答案here所提到的。

不过,我要指出的是,理解Matrices大约需要一分钟的时间,这会让你成为一名更好的Android程序员。

票数 0
EN

Stack Overflow用户

发布于 2012-08-08 03:59:01

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

代码语言:javascript
复制
        canvas.save();
        canvas.rotate(180, x, y);
        canvas.drawBitmap(bitmap, x, y, null);
        canvas.restore();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11852762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档