访问冲突(Direct2D HWNDRenderTarget :: DrawBitmap()函数)

时间:2017-02-02 23:51:20

标签: visual-c++ access-violation direct2d

我在Direct2D中绘制位图时遇到问题。每当我使用HWNDRenderTarget::DrawBitmap函数时,我都会遇到访问冲突(代码0xc0000005)。这是有问题的功能。

void Graphics::game() {

        mprendertarget->Clear(D2D1::ColorF(D2D1::ColorF::Black));
        if (rot > 360) {
            rot = 0;
        }
        if (rot2 > 360) {
            rot2 = 0;
        }
        if (GetKeyState(VK_LEFT)) {
            rot--;
        }

        if (GetKeyState(VK_RIGHT)) {
            rot++;
        }
        D2D1_RECT_F debugarenatextrect = {0.0f, 0.0f, 1000.0f, 6000.0f};
        mprendertarget->DrawTextA(P_GAME_DEBUG_ARENATEXT, wcslen(P_GAME_DEBUG_ARENATEXT), mpgenerictextformat, debugarenatextrect, mpsolidbrush, D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);

        const D2D1_RECT_F shipimagerect = RectF(0.0f,0.0f,29.0f,29.0f); 
        mprendertarget->SetTransform(D2D1::Matrix3x2F::Rotation(rot, D2D1::Point2F(29 / 2, 29 / 2)));
        //Access Violation! V
        mprendertarget->DrawBitmap(ship, RectF(0.f, 0.f, 29.f, 29.f), 1.0f, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, RectF(0.f, 0.f, 29.f, 29.f));
    }

理想情况下,按下左箭头时应该减少rot(旋转),按下右箭头键时增加rot。然后它显示一艘船的小图像(29x29),旋转rot度。 P_GAME_DEBUG_ARENATEXT是WCHAR *字符串,与问题无关。 mprendertarget的类型为ID2D1HwndRenderTarget。

1 个答案:

答案 0 :(得分:0)

事实证明,有一个函数将船舶图像重写为NULL。我删除了它,并且没有更多的访问冲突。