다음을 통해 공유

Is there a way to convert a Direct2d rendered screen to a GDI+ Bitmap object?

채문석(jim) 41 평판 포인트
2024-07-04T08:23:02.86+00:00

I rendered image files and text on an MFC Dialog screen. I would like to convert this rendered screen to a GDI+ Bitmap object. The reason for converting is to retrieve the scan0 value of Bitmapdata using the Bitmap object. is this possible?

void CD2D1AppDlg::DrawingRender()
{
	HRESULT hr = S_OK;
	if (m_pRenderTarget == nullptr)
    {
        RECT rc;
        GetClientRect(&rc);
        D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top);
        // Create render target
        hr = m_pDirect2dFactory->CreateHwndRenderTarget(
            D2D1::RenderTargetProperties(),
            D2D1::HwndRenderTargetProperties(m_hWnd, size),
            &m_pRenderTarget);
        
        if (FAILED(hr))
        {
            MessageBox(L"Failed to create render target", L"Error", MB_OK);
            return ;
        }
    }
	m_pRenderTarget->BeginDraw();
	m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::Black));
	if (m_pBitmap)
    {
        D2D1_SIZE_F imageSize = m_pBitmap->GetSize();
        m_pRenderTarget->DrawBitmap(m_pBitmap, D2D1::RectF(10, m_imagePosY, 10 + imageSize.width, m_imagePosY + imageSize.height));
    }
	// Draw text
    static const WCHAR sc_helloWorld[] = L"Hello, World!";
    D2D1_RECT_F layoutRect = D2D1::RectF(20, static_cast<float>(m_textPosY), 300, static_cast<float>(m_textPosY + 50));
    m_pRenderTarget->DrawText(sc_helloWorld, ARRAYSIZE(sc_helloWorld) - 1, m_pTextFormat, &layoutRect, m_pTextBrush);
	hr = m_pRenderTarget->EndDraw();
	if (FAILED(hr))
    {
        MessageBox(L"Rendering failed", L"Error", MB_OK);
    }
	
}
Microsoft Q&A
Microsoft Q&A
이 태그를 사용하여 제안, 기능 요청 및 버그를 Microsoft Q&A 팀과 공유합니다. Microsoft Q&A 팀은 정기적으로 피드백을 평가하고 그 과정에서 업데이트를 제공합니다.
질문 264개
댓글 0개 설명 없음
투표 {count}개

답변

질문 작성자가 수락한 답변이라고 답변에 표시할 수 있으며, 이를 통해 작성자의 문제를 해결한 답변을 사용자가 알 수 있도록 도와줍니다.