【问题标题】:What is the relationship between canvas and matrix in Android?Android中canvas和matrix有什么关系?
【发布时间】:2014-12-23 10:32:41
【问题描述】:

我阅读了这个画布概述:

Canvas 类拥有“draw”调用。要画一些东西,你需要 4 基本组件:一个位图来保存像素,一个画布来托管 绘图调用(写入位图),绘图原语(例如 Rect, 路径、文本、位图)和油漆(用于描述颜色和样式 用于绘图)。

谁能更清楚地解释一下画布?

我对画布和矩阵之间的关系感到困惑。画布是否从矩阵中获取转换? 我想知道下面的功能是否会影响画布?

canvas.drawBitmap(bitmap, matrix, paint);

也就是说画布矩阵和位图矩阵有区别吗?

我问这个,因为当我使用canvas.drawBitmap然后使用canvas.concat()然后绘制任何对象时,这个对象在画布上进行相同的转换,所以我认为画布和位图具有相同的矩阵!!

【问题讨论】:

    标签: android canvas matrix bitmap concat


    【解决方案1】:

    它们是不同的。当使用画布绘制提供矩阵的位图时,在内部,将提供的矩阵连接到当前画布矩阵。

    换句话说,调用canvas.drawBitmap(rectBitmap, matrix, paint);具有相同的效果:

        canvas.save();
        canvas.concat(matrix);
        canvas.drawBitmap(rectBitmap, 0, 0, paint);
        canvas.restore();
    

    这解释了为什么您的对象会进行相同的转换,因为您正在调用 canvas.concat(matrix); 并在此之后绘制对象。

    【讨论】:

    • 但是如果我不使用“canvas.concat”,“canvas.drawBitmap”是否在内部调用“canvas.concat”?
    • 以及哪个矩阵与其他矩阵连接?
    • 它首先将当前画布矩阵保存到堆栈,然后将提供的矩阵连接到当前画布矩阵,然后绘制位图,最后弹出保存的矩阵,使其成为当前画布矩阵。这样,下一个绘图操作就不会受到您提供给drawBitmap 的矩阵的影响。
    • 对不起,我还不明白 :( 当原始画布被更改时,下一个操作如何不受影响,正如你提到的“然后将提供的矩阵连接到当前画布矩阵”
    • 因为在 concat 操作之前它将画布矩阵保存到堆栈中,然后恢复保存的矩阵。
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多