游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1325|回复: 1

Direct不能显示图片到屏幕

[复制链接]

21

主题

124

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-3-17 15:59:00 | 显示全部楼层 |阅读模式
DircetDraw读取了图片的
就是不能显示图片到屏幕上
提示:获得图片描述信息失败
哪位老大帮帮忙啊!!!

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2007-3-17 18:50:00 | 显示全部楼层

Re:Direct不能显示图片到屏幕

extern "C" LPDIRECTDRAWSURFACE dxLoadImageLPDIRECTDRAW pdd, LPCSTR szBitmap)
{
        HBITMAP hbm;
        BITMAP        bm;
        DDSURFACEDESC        ddsd;
        LPDIRECTDRAWSURFACE         pdds;
        hbm = (HBITMAP)LoadImage(NULL, TEXT(szBitmap), IMAGE_BITMAP, 0, 0,
        LR_LOADFROMFILE | LR_DEFAULTSIZE);
        GetObject(hbm, sizeof(BITMAP), (PTSTR)& bm);
        ZeroMemory(&ddsd, sizeof(ddsd));

        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
        ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY;
        ddsd.dwWidth = bm.bmWidth;
        ddsd.dwHeight = bm.bmHeight;

        if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
        {
                return NULL;
        }
        dxCopyImage(pdds, hbm, 0, 0, 0, 0);
        DeleteObject(hbm);
        return pdds;
}



extern "C" int dxCopyImage(LPDIRECTDRAWSURFACE pdds, HBITMAP hbm, INT32 x,INT32 y,INT32
        dx,INT32 dy)
{

        HDC hdcImage;
        HDC hdc;
        BITMAP bm;
        DDSURFACEDESC ddsd;

        if (hbm == NULL || pdds == NULL)
        {
                return DX_FALSE;
        }
        pdds->Restore();
        hdcImage = CreateCompatibleDC(NULL);
        if (!hdcImage)
        {
                return 0;       
        }
        SelectObject(hdcImage, hbm);
        GetObject(hbm, sizeof(bm), &bm);
        dx = (dx == 0 ? bm.bmWidth : dx);
        dy = (dy == 0 ? bm.bmHeight : dy);
        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
        pdds->GetSurfaceDesc(&ddsd);
        if ((pdds->GetDC(&hdc)) == DD_OK)
        {
                StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y, dx, dy,
        SRCCOPY);
                pdds->ReleaseDC(hdc);
        }

        DeleteDC(hdcImage);
       
        return 1;
}

发代码
先读到离屏页面,再BLT到主页面
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 17:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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