游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5358|回复: 14

DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

[复制链接]

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2005-4-21 12:02:00 | 显示全部楼层 |阅读模式
void render(void)
{
// This will hold the back buffer
IDirect3DSurface9* backbuffer = NULL;
// Check to make sure you have a valid Direct3D device
if( NULL == pd3dDevice )
return;                           // Clear the back buffer to a blue color
IDirect3DSurface9* surface = NULL;
HRESULT hResult =pd3dDevice->CreateOffscreenPlainSurface(
640, 480, D3DFMT_X8R8G8B8,
D3DPOOL_DEFAULT,
&surface,
NULL);
// Check the return value to make sure that this function call was successful
if (FAILED(hResult))
hResult=NULL;

HRESULT Result = D3DXLoadSurfaceFromFile( surface,
NULL,
NULL,
"C:\TEST.JPG",
NULL,
D3DX_DEFAULT,
0,
NULL );
if ( FAILED(Result ) )
Result= NULL;



// Get the back buffer
pd3dDevice->GetBackBuffer( 0,
0,
D3DBACKBUFFER_TYPE_MONO,
&backbuffer );
// Copy the offscreen surface to the back buffer
// Note the use of NULL values for the source and destination RECTs
// This ensures a copy of the entire surface to the back buffer

pd3dDevice->StretchRect( surface,
NULL,
backbuffer,
NULL,
D3DTEXF_NONE );
//Present the back buffer contents to the display
pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2005-4-21 12:12:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

没人知道吗?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-4-21 12:34:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

为什么不用sprite?

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2005-4-21 12:52:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

我上面的写错了吗?

0

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2005-4-21 13:02:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

我没记错的话,记得DirectX是微软的东西,微软怎么会在自己的主函数里不去支持自己的BMP
而去默认支持JPG呢?真是不可想像啊(见楼上 D3DXLoadSurfaceFromFile 函数)。

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2005-4-21 13:20:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

BMP 也不显示啊,看来完了

3

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2005-4-21 13:31:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

是图片格式的问题。

        //要合适于当前显示的格式
        D3DXIMAGE_INFO image_info;

        D3DDISPLAYMODE        displaymode;

        g_pd3dDevice->GetDisplayMode(NULL,&displaymode);

        D3DXGetImageInfoFromFile(Filename,&image_info);

        hResult = g_pd3dDevice->CreateOffscreenPlainSurface(
                image_info.Width, // the width of the surface to create
                image_info.Height, // the height of the surface to create
                displaymode.Format, // the surface format
                D3DPOOL_DEFAULT, // the memory pool to use
                &m_lSurface, // holds the resulting surface
                NULL); // reserved; should be NULL

        // Check the return value to make sure that this function call was successful
        if (FAILED(hResult))
                return E_FAIL;


        hResult = D3DXLoadSurfaceFromFile( m_lSurface,
                NULL,
                NULL,
                Filename,
                NULL,
                D3DX_DEFAULT,
                0,
                NULL );

        if ( FAILED( hResult ) )
                return E_FAIL;

        return        S_OK;
最好不要用表面,用精灵或广告板都好。原因自已找。

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2005-4-21 14:12:00 | 显示全部楼层

谢谢各位的帮忙.不过如下代码还是不行,还是出现黑,图片

//
void render(void)
{
// This will hold the back buffer
IDirect3DSurface9* backbuffer = NULL;
// Check to make sure you have a valid Direct3D device
if( NULL == pd3dDevice )
return;   
D3DXIMAGE_INFO info;
D3DDISPLAYMODE displaymode;
pd3dDevice->GetDisplayMode(NULL,&displaymode);
D3DXGetImageInfoFromFile("c:\ttt.bmp",&info);                        // Clear the back buffer to a blue color
IDirect3DSurface9* surface;


HRESULT hResult =pd3dDevice->CreateOffscreenPlainSurface(
        info.Width, info.Height,displaymode.Format,
D3DPOOL_DEFAULT,
&surface,
NULL);
// Check the return value to make sure that this function call was successful
if (FAILED(hResult))
hResult=NULL;


HRESULT Result = D3DXLoadSurfaceFromFile( surface,
NULL,
NULL,
"C:\ttt.bmp",
NULL,
D3DX_DEFAULT,
0,
NULL );
if ( FAILED(Result ) )
Result= NULL;


// Get the back buffer
pd3dDevice->GetBackBuffer( 0,
0,
D3DBACKBUFFER_TYPE_MONO,
&backbuffer );
// Copy the offscreen surface to the back buffer
// Note the use of NULL values for the source and destination RECTs
// This ensures a copy of the entire surface to the back buffer

pd3dDevice->StretchRect( surface,
NULL,
backbuffer,
NULL,
D3DTEXF_NONE );
//Present the back buffer contents to the display
pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}

0

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2005-4-21 17:48:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

同二楼一说~~~为什么不用sprite呢?简单多了!

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-4-21 18:14:00 | 显示全部楼层

Re:DX9 2D图片显示,显示不了,谁知道我错在那了,救命啊?

你是指我吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 12:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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