c – Direct2D拒绝在窗口上绘制位图,无声地失败

c – Direct2D拒绝在窗口上绘制位图,无声地失败,第1张

概述我试图用Direct2D在一个窗口上绘制128×128位图.但是,没有任何显示,EndDraw()不会返回任何错误. 这是我的WM_PAINT代码: case WM_PAINT: D2D1_RECT_F testd2dbuttonrect; mainwRT->BeginDraw(); mainwRT->SetTransform( D2D1::Mat 我试图用Direct2D在一个窗口上绘制128×128位图.但是,没有任何显示,EndDraw()不会返回任何错误.

这是我的WM_PAINT代码:

case WM_PAINT:        D2D1_RECT_F testd2dbuttonrect;        mainwRT->BeginDraw();        mainwRT->Settransform( D2D1::Matrix3x2F::IDentity() );        testd2dbutton.pd2drectgm->GetRect( &testd2dbuttonrect );        mainwRT->FillRectangle( &testd2dbuttonrect,pSolIDBrush );        //This is where I'm trying to draw my bitmap        mainwRT->FillRectangle( D2D1::RectF(0.0f,0.0f,127.0f,127.0f),pBgndBrush );        errmsg = mainwRT->EndDraw();        if( !SUCCEEDED(errmsg) )            printf("EndDraw() error: %d\r\n",errmsg );        break;

我怀疑这可能是因为我从Visual Studio资源加载的位图数据是垃圾,但我无法知道,因为没有任何失败并提供错误消息.这是我用来从资源加载ID2D1Bitmap的代码:

int LoadBitmapFromresource( IWICImagingFactory *pImageFactory,ID2D1rendertarget *pRT,int resID,ID2D1Bitmap **ppD2DBitmap ){    int errmsg;    HBITMAP hbitmap;    WICBitmapAlphaChannelOption wicAlpha;    IWICBitmap *pwicbitmap;    IWICBitmapSource *pconverteDWicbitmap;    IWICFormatConverter *pConverter;    ID2D1Factory *d2dfactory;    D2D1_BITMAP_PROPERTIES d2dbp;    D2D1_PIXEL_FORMAT d2dpf;    float dpiX;    float dpiY;    hbitmap = LoadBitmap( GetModuleHandle(NulL),MAKEINTRESOURCEW(resID) );    wicAlpha = WICBitmapUseAlpha;    errmsg = pImageFactory->CreateBitmapFromHBITMAP( hbitmap,NulL,wicAlpha,&pwicbitmap );    if( !SUCCEEDED(errmsg) )    {        printf("LoadBitmapFromresource::CreateBitmapFromHBITMAP() error: %x\r\n",errmsg );        return errmsg;    }    errmsg = pImageFactory->CreateFormatConverter( &pConverter );    if( !SUCCEEDED(errmsg) )    {        printf("LoadBitmapFromresource::CreateFormatConverter() error: %x\r\n",errmsg );        return errmsg;    }    d2dpf.format = dxgi_FORMAT_B8G8R8A8_UnorM;    d2dpf.AlphaMode = D2D1_Alpha_MODE_PREMulTIPLIED;    pRT->GetFactory( &d2dfactory );    d2dfactory->GetDesktopDpi( &dpiX,&dpiY );    d2dbp.pixelFormat = d2dpf;    d2dbp.dpiX = dpiX;    d2dbp.dpiY = dpiY;    pConverter->Initialize( pwicbitmap,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,WICBitmapPaletteTypeMedianCut );    if( !SUCCEEDED(errmsg) )    {        printf("LoadBitmapFromresource::Initialize() error: %x\r\n",errmsg );        return errmsg;    }    errmsg = WICConvertBitmapSource( GUID_WICPixelFormat32bppPBGRA,pwicbitmap,&pconverteDWicbitmap );    if( !SUCCEEDED(errmsg) )    {        printf("LoadBitmapFromresource::WICConvertBitmapSource() error: %x\r\n",errmsg );        return errmsg;    }    errmsg = pRT->CreateBitmapFromWicBitmap( pconverteDWicbitmap,&d2dbp,ppD2DBitmap );    if( !SUCCEEDED(errmsg) )    {        printf("LoadBitmapFromresource::CreateBitmapFromWicBitmap() error: %x\r\n",errmsg );        return errmsg;    }    pConverter->Release();    pwicbitmap->Release();    DeleteObject( hbitmap );    return 0;}

我在Visual Studio 2010中使用C与本机WinAPI.

解决方法 我认为你仍然需要在WM_PAINT中使用经典的BeginPaint(),然后进行D2D渲染,然后调用EndPaint().这就是我的代码所做的,我认为它也是MSDN示例代码小发明所做的. 总结

以上是内存溢出为你收集整理的c – Direct2D拒绝在窗口上绘制位图,无声地失败全部内容,希望文章能够帮你解决c – Direct2D拒绝在窗口上绘制位图,无声地失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存