Skia SkCanvas 不能用 SkBitmap 构建

Posted

技术标签:

【中文标题】Skia SkCanvas 不能用 SkBitmap 构建【英文标题】:Skia SkCanvas cannot be constructed with SkBitmap 【发布时间】:2017-04-05 01:39:00 【问题描述】:

我有一个 draw(SkCanvas* canvas) 函数。

在 main() 中我写:

SkBitmap myBitmap;
myBitmap.allocN32Pixels(640, 480);

SkCanvas *myCanvas(&myBitmap);
draw(myCanvas);

但是 Visual Studio 会产生这个错误:

"a value of type "SkBitmap *" cannot be used to initialize an entity of type "SkCanvas*"

我做错了什么?

我的 draw() 函数使帖子变得混乱,对于这个问题完全没用,否则我已经发布了。

这是 SkCanvas 的构造。

/** Construct a canvas with the specified bitmap to draw into.
        @param bitmap   Specifies a bitmap for the canvas to draw into. Its
                        structure are copied to the canvas.
    */
explicit SkCanvas(const SkBitmap& bitmap);

【问题讨论】:

【参考方案1】:
SkCanvas *myCanvas(&myBitmap);

这是一个指向画布的指针。 SkCanvas*SkBitmap*的指针类型不相关。

SkCanvas myCanvas(&myBitmap);

这是一个myCanvas 类型的值,用指向位图的指针初始化。如果SkCanvas 有一个演员采取SkBitmap*,这应该可以。

它没有。它确实有:

explicit SkCanvas(const SkBitmap& bitmap);

所以这意味着:

SkCanvas myCanvas(myBitmap);

您可能还需要将绘图调用更改为:

draw(&myCanvas);

假设可行。作为猜测,您还需要复习一下指针和值之间的区别。

【讨论】:

它只解决了我一半的问题。 “构造函数不匹配”错误仍然存​​在。 @aurk 您还误读了画布位图构造函数。固定。

以上是关于Skia SkCanvas 不能用 SkBitmap 构建的主要内容,如果未能解决你的问题,请参考以下文章

Skia往SkBitmap上绘图时画不出来的问题

如何在 Windows 或 Linux 上使用 Skia

Skia深入分析

Skia深入分析

如何在通常的 iOS 应用程序(基于 UIWindow)中使用 GPU 加速的 SkCanvas?

Android Canvas 硬件加速