如何使用direct2d和ID2D1HwndRenderTarget将位图保存到文件

时间:2013-01-26 11:44:39

标签: c++ bitmap direct2d

How to save ID2D1Bitmap to PNG file没有帮助我。

我正在使用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

0 个答案:

没有答案