本文介绍了ID2D1RenderTarget :: CreateBitmap返回0x88982F80的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试从内存来源数据创建ID2D1Bitmp,但ID2D1RenderTarget :: CreateBitmap函数始终返回0x88982F80错误代码,即使没有源数据也是如此。 My代码是对Direct2D示例代码的简单修改:(VS 2008 @ Windows 7)
I was trying to create an ID2D1Bitmp from the in-memory source data, but the ID2D1RenderTarget::CreateBitmap function always returns 0x88982F80 error code, even with no source data. My code is a simple modification of the Direct2D sample code: (VS 2008 @ Windows 7)
HWND m_hWnd;
ID2D1Factory *m_pD2DFactory;
ID2D1HwndRenderTarget *m_pRenderTarget;
ID2D1SolidColorBrush *m_pBrush;
ID2D1Bitmap *m_pBitmap;
IDWriteFactory *m_pDWriteFactory;
IDWriteTextFormat *m_pTextFormat;
/// CreateDeviceIndependentResources
///
/// This method is used to create resources which are not bound
/// to any device. Their lifetime effectively extends for the
/// duration of the app.
///
HRESULT CreateDeviceIndependentResources()
{
static const WCHAR msc_fontName[] = L"Verdana";
static const FLOAT msc_fontSize = 50;
HRESULT hr;
// Create a Direct2D factory.
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pD2DFactory);
if (SUCCEEDED(hr))
{
// Create a DirectWrite factory.
hr = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(m_pDWriteFactory),
reinterpret_cast<IUnknown **>(&m_pDWriteFactory)
);
}
if (SUCCEEDED(hr))
{
// Create a DirectWrite text format object.
hr = m_pDWriteFactory->CreateTextFormat(
msc_fontName,
NULL,
DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
msc_fontSize,
L"", //locale
&m_pTextFormat
);
}
if (SUCCEEDED(hr))
{
// Center the text horizontally and vertically.
m_pTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);
m_pTextFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
}
return hr;
}
/// CreateDeviceResources
///
/// This method creates resources which are bound to a particular
/// D3D device. It's all centralized here, in case the resources
/// need to be recreated in case of D3D device loss (eg. display
/// change, remoting, removal of video card, etc).
///
HRESULT CreateDeviceResources()
{
HRESULT hr = S_OK;
if (!m_pRenderTarget)
{
RECT rc;
if(!m_hWnd)
m_hWnd = ::GetDesktopWindow();
GetClientRect(m_hWnd, &rc);
D2D1_SIZE_U size = D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top
);
// Create a DC render target.
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
D2D1_RENDER_TARGET_TYPE_DEFAULT,
D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE),
0,
0,
D2D1_RENDER_TARGET_USAGE_NONE,
D2D1_FEATURE_LEVEL_DEFAULT
);
// Create a GDI render target
//hr = m_pD2DFactory->CreateDCRenderTarget(&props, &m_pDCRT);
// Create a Direct2D render target
hr = m_pD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(m_hWnd, size),
&m_pRenderTarget
);
if (SUCCEEDED(hr))
{
// Create a black brush.
hr = m_pRenderTarget->CreateSolidColorBrush(
D2D1::ColorF(D2D1::ColorF::Black),
&m_pBrush
);
// Create an uninitialized bitmap
hr = m_pRenderTarget->CreateBitmap( // <==================== Failed to create bitmap
D2D1::SizeU(10, 10),
D2D1::BitmapProperties(
D2D1::PixelFormat(
DXGI_FORMAT_B5G6R5_UNORM,
D2D1_ALPHA_MODE_IGNORE)
),
&m_pBitmap
);
}
}
return hr;
}
/// DiscardDeviceResources
///
/// Discard device-specific resources which need to be recreated
/// when a D3D device is lost
///
void DiscardDeviceResources()
{
SafeRelease(&m_pRenderTarget);
SafeRelease(&m_pBrush);
SafeRelease(&m_pBitmap);
}
推荐答案
Direct2D基于Direct3D,所以你可能想在forums.xna.com上试试Direct3D论坛。
Direct2D is based on Direct3D, so you may want to try the Direct3D forums on forums.xna.com.
这篇关于ID2D1RenderTarget :: CreateBitmap返回0x88982F80的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!