как сохранить растровое изображение в файл с помощью direct2d и ID2D1HwndRenderTarget

Как сохранить 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


person hughes    schedule 26.01.2013    source источник
comment
ID2D1HwndRenderTarget просто наследуется от ID2D1RenderTarget. Так почему же образец не помог? Не могли бы вы также опубликовать ссылку на образец?   -  person sraok    schedule 26.01.2013
comment
Привет! Вот ссылка на код ссылка Пример не помог, потому что я использовал CComPtr‹ID2D1Factory› m_fabriqueD2D1; ID2D1HwndRenderTarget *m_pRenderTarget;   -  person hughes    schedule 26.01.2013
comment
Вы пробовали CreateBitmapFromWicBitmap, а затем ID2D1Bitmap::CopyFromRenderTarget?   -  person vt.    schedule 11.05.2018