Aliens 2024-11-21 20:27 采纳率: 33.3%
浏览 45
已结题

Direct2D,一个图像如何绘制到不同窗体?

Direct2D,在一个窗体上绘制的图像,将此图像再绘制到另一个窗体时,会产生0x88990015"在错误的呈现器目标上实现资源"错误,因为画刷等资源都是第一个窗体的渲染目标创建的,不能绘制到其他窗体。那么能否先绘制一个共享的图像,再把它绘制到不同窗体呢?
我是初学,最好给出具体代码,AI回答的不采纳,谢谢!

  • 写回答

31条回答 默认 最新

  • 阿里嘎多学长 2024-11-21 20:28
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Direct2D绘制图像到不同窗体的解决方案

    首先,确保你已经创建了两个不同的窗体,使用Direct2D Rendering Context来绘制图像。

    你可以使用以下步骤来绘制共享的图像,并将其绘制到不同的窗体:

    1. 创建一个shared textures资源,用于存储共享的图像。
    CComPtr<ID2D1Texture> sharedTexture;
    hr = D2D1CreateTextureFromFileInPlace(
        filename,
        &D2D1_TEXTURE_OPTIONS_SHARED,
        NULL,
        &sharedTexture
    );
    
    1. 创建一个 Direct2D Rendering Context,以便绘制图像到共享的图像。
    CComPtr<ID2D1RenderTarget> renderTarget;
    hr = d2dFactory->CreateD2D1RenderTarget(
        windowWidth,
        windowHeight,
        D2D1_RENDER_TARGET_OPTIONS_NONE,
        &rendertTarget
    );
    
    1. 使用共享的图像绘制到渲染目标。
    hr = renderTarget->DrawImage(
        sharedTexture.Get(),
        0,
        0,
        windowWidth,
        windowHeight
    );
    
    1. 在需要绘制图像的窗体上,使用共享的图像绘制到渲染目标。
    CComPtr<ID2D1RenderTarget> targetRenderTarget;
    hr = d2dFactory->CreateD2D1RenderTarget(
        targetWindowWidth,
        targetWindowHeight,
        D2D1_RENDER_TARGET_OPTIONS_NONE,
        &targetRenderTarget
    );
    
    hr = targetRenderTarget->DrawImage(
        sharedTexture.Get(),
        0,
        0,
        targetWindowWidth,
        targetWindowHeight
    );
    

    通过上面的步骤,你便可以将共享的图像绘制到不同的窗体。

    注意:在上面的代码中,d2dFactory 是 Direct2D Factory 对象,而 windowWidthwindowHeight 是窗体的宽度和高度。同时, targetWindowWidthtargetWindowHeight 是目标窗体的宽度和高度。

    如果你需要更多帮助,请提供更多的细节和代码,以便更好地回答你的问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月24日
  • 创建了问题 11月21日