4

如何将 ID2D1Bitmap 保存到 PNG 文件对我没有帮助。

我正在使用 Direct2D。

我想将一个ID2D1**Hwnd**RenderTarget *m_pRenderTarget文件保存为 bmp 或 png 等。

但是我在 MSDN 上找到的示例使用ID2D1RenderTarget.

在我的例子中,我在 m_pRenderTarget 中绘制了我的图形,我使用该方法ID2D1Bitmap::CopyFromRenderTarget (...) 获取了一个 ID2D1Bitmap。

之后,要使用下面的保存功能,我必须将ID2D1Bitmap我得到的转换为IWICBitmap. 因为下面的函数不使用ID2D1Bitmap...

我还没有找到如何做到这一点。

谢谢。

if (SUCCEEDED(hr))
{

    //
    // Save image to file
    //

    hr = pWICFactory->CreateStream(&pStream);
}

WICPixelFormatGUID format = GUID_WICPixelFormatDontCare;
if (SUCCEEDED(hr))
{
    static const WCHAR filename[] = L"output.png";
    hr = pStream->InitializeFromFilename(filename, GENERIC_WRITE);
}
if (SUCCEEDED(hr))
{
    hr = pWICFactory->CreateEncoder(GUID_ContainerFormatPng, NULL, &pEncoder);
}
if (SUCCEEDED(hr))
{
    hr = pEncoder->Initialize(pStream, WICBitmapEncoderNoCache);
}
if (SUCCEEDED(hr))
{
    hr = pEncoder->CreateNewFrame(&pFrameEncode, NULL);
}
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->Initialize(NULL);
}
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->SetSize(sc_bitmapWidth, sc_bitmapHeight);
}
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->SetPixelFormat(&format);
}
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->WriteSource(pWICBitmap, NULL);
}
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->Commit();
}
if (SUCCEEDED(hr))
{
    hr = pEncoder->Commit();
}

为了方便解释,我已经有一个 Direct2D 代码,并且我的绘图图像保存在我的 ID2D1HwndRenderTarget 上。我想将我的 ID2D1HwndRenderTarget 绘制的图像保存在磁盘上。

我找到的示例创建了一个新的 IWICBitmap,并使用 pD2DFactory->CreateWicBitmapRenderTarget(pWICBitmap,D2D1::RenderTargetProperties(),&pRT);

create a new ID2D1RenderTarget to draw. After drawing operations, it wrote the bitmap image 
    hr = pFrameEncode->WriteSource(pWICBitmap, NULL);

就我而言,我不知道如何将图像从我的 ID2D1HwndRenderTarget 放到 IWICBitmap... 来编写它。有人知道如何绑定 ID2D1HwndRenderTarget 和 IWICBitmap

4

0 回答 0