【问题标题】:How to add Canvas to a custom class?如何将 Canvas 添加到自定义类?
【发布时间】:2020-07-31 02:28:37
【问题描述】:

Graphics32 类 TBitmap32 有一个画布,因此可以在 Canvas 上绘制的所有内容都可以在 TBitmap32 上绘制。 我想创建自己的位图类,它既不是从 TBitmap 也不是 TBitmap32 派生的,并且还有一个 Canvas。 我可以通过使用带有 Canvas 的 TBitmap 来伪造它,然后将像素复制到我的类中。但这很慢。

【问题讨论】:

  • 我想创建自己的位图类,既不是从TBitmap 也不是TBitmap32 派生的,并且还有一个 Canvas。 为什么???
  • @TomBrunberg 出于性能原因。
  • @Tom 那么,是什么阻止您简单地编写从TCustomCanvas 派生的新类来处理您需要的像素数据,然后在您的自定义位图类中使用该类? TBitmapTBitmap32 做同样的事情。您需要更具体地了解您在实现所需内容时遇到的问题。

标签: delphi canvas graphics32


【解决方案1】:

使用 Graphics32 可以使用多个绘图“后端”。每个都有不同的优点和缺点。但是,主要与性能和内存消耗有关。

默认(对于 TBitmap32)是 TGDIBackend,它非常通用。这就是说,它继承了 GDI 的所有缺点。特别是 GDI 元素的数量是有限的,因此您不能拥有无限多的实例。

更好的选择是 TMemoryBackend,但仅此一项不能被绘制(“blitted”)到屏幕上(即任何 DC)。一个折衷方案是 TGDIMemoryBackend,它是一个能够在屏幕上绘制的 TMemoryBackend。但是,如果我没记错的话,它缺少字体支持,但是根据您的要求,这可能没有必要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2019-05-05
    • 2011-01-24
    相关资源
    最近更新 更多