游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1286|回复: 0

请教DDRAW加载位图的问题

[复制链接]

5

主题

17

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2009-5-17 13:38:00 | 显示全部楼层 |阅读模式
按照网络上的一种方式,说是使用GDI接口加载位图然后拷贝到DDRAW中这样,可以适应8,16,24位的各种BMP图.我以前是按<WINDOWS游戏编程大师技巧>的代码写的可以正常运行和显示,但是换成以上的方法后就无法显示了以下是具体的代码.
//创建表面然后在拷贝图到表面上去
void CreateBitmapSurface(LPDIRECTDRAWSURFACE7 lpSurface, char *fname, int xs, int ys)
{
        HBITMAP hBitmap;
        CreateSurface(&lpSurface, xs, ys);
        hBitmap = (HBITMAP)LoadImage(NULL, fname, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        DrawHBitmap(lpSurface, hBitmap, 0, 0, xs, ys);
        DeleteObject(hBitmap);
}
//加载位图到表面
void DrawHBitmap(IDirectDrawSurface7 *lpSurface, HBITMAP hBitmap, int x, int y, int width, int height)
{
        HDC hdcImage;
        HDC hdc;
        BITMAP bm;
        if (lpSurface == NULL || hBitmap == NULL)
                return;
        lpSurface->Restore();
        hdcImage = CreateCompatibleDC(NULL);
        SelectObject(hdcImage, hBitmap);
        GetObject(hBitmap, sizeof(bm), &bm);
        width = width == 0 ? bm.bmWidth : width;
        height = height == 0 ? bm.bmHeight : height;
        lpSurface->GetDC(&hdc);
        BitBlt(hdc, x, y, width, height, hdcImage, 0, 0, SRCCOPY);
        lpSurface->ReleaseDC(hdc);
        DeleteDC(hdcImage);
}

//创建表面
void CreateSurface(LPDIRECTDRAWSURFACE7 *lpSource, int xs, int ys)
{
        DDSURFACEDESC2 ddsd;
        ZeroMemory(&ddsd, sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
        ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
        ddsd.dwWidth = xs;
        ddsd.dwHeight = ys;
        lpdd->CreateSurface(&ddsd, lpSource, NULL);
}

然后我在Game_Init里面初始化了游戏的背景表面,代码如下
CreateBitmapSurface(lpddsbackground,"bitmap24.bmp",SCREEN_WIDTH,SCREEN_HEIGHT);
然后在Game_Main中BLT了表面到我的主显示表面,代码如下
lpddsprimary->Blt(NULL,lpddsbackground,NULL,DDBLT_WAIT,NULL);

编译没有任何问题,然后显示就是一片漆黑,请问为什么了.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 09:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表