【问题标题】:Destroy Direct2D bitmap?销毁 Direct2D 位图?
【发布时间】:2015-04-20 21:51:22
【问题描述】:

我正在使用 C++ Builder XE7。每当表单调整大小时,我都需要重建一个 D2D 位图,我使用 CreateBitmap() 创建该位图。由于这会很快耗尽所有视频内存,因此我想在创建新位图之前销毁之前的位图。奇怪的是,我找不到任何关于如何销毁这个 _di_ID2D1Bitmap 的信息。我尝试了 Release() 方法,但这只是在 systobj.h 的第 291 行给了我一个 AV。

销毁 _di_ID2D1Bitmap 的正确方法是什么?

谢谢。

【问题讨论】:

  • 如果 _di_ID2D1Bitmap 是ID2D1Bitmap 接口,只需删除对它的所有引用(例如mySavedBMPRef = null)。
  • 谢谢@PeterKostov。就这么简单吗?我的困惑来自于我把它看成一个指针,我现在明白它不是。我假设不是取消它,而是将其替换为“指向”新位图也可以吗?
  • _di_ID2D1BitmapDelphiInterface。该类型的变量是指针。您不必手动释放它,因为有一个自动引用计数 - 即 - 当没有引用剩余时,它将自动释放。简而言之,如果您有一个指针P 持有只有一个 对您的ID2D1Bitmap 的引用,当您将它传递给CreateBitmap() 时,它将获取新位图的引用,而旧位图将变为 0 个引用并将被释放。
  • 酷,谢谢。不熟悉德尔福,所以不知道(也没有记录)。如果您将其发布为答案,我会给您适当的信用。

标签: bitmap direct2d c++builder-xe7


【解决方案1】:

_di_ID2D1BitmapDelphiInterface。 Delphi 中的接口引用是指向 IMT 的指针。所以,_di_ID2D1Bitmap 类型的变量是一个指针。

您不必手动释放它,因为有一个自动引用计数 - 即 - 当没有剩余引用时,它将自动释放。您可以检查IInterface._AddRefIInterface._Release 方法。

简而言之,如果您有一个指针P 持有只有一个 引用您的ID2D1Bitmap(即_di_ID2D1Bitmap),当您将它传递给CreateBitmap() 时,它将获得一个引用新位图,而旧位图将变为 0 引用并将被释放。

这里有一些有用的读物​​:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2015-05-02
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多