4

ID2D1Bitmap を PNG ファイルに保存する方法は役に立ちませんでした。

Direct2D を使用しています。

ID2D1**Hwnd**RenderTarget *m_pRenderTargetファイルにbmpやpngなどで保存したい

しかし、MSDN で見つけたサンプルではID2D1RenderTarget.

私の場合、m_pRenderTarget で図を描画し、メソッドを使用してID2D1Bitmap::CopyFromRenderTarget (...) ID2D1Bitmap を取得しました。

その後、次の保存関数を使用するには、ID2D1BitmapI got をに変換する必要があり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