游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2385|回复: 3

【求助】怎么修改一个directdraw游戏的屏幕分辨率?

[复制链接]

2

主题

12

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2007-12-6 18:58:00 | 显示全部楼层 |阅读模式
我从网上下载了koules游戏的源代码学习,想把源码中的256色修改为24位或者16位的,同时修改屏幕分辨率为1024×768,可是调试的时候发现屏幕一团糟,只有三分之一的表面显示出来,明显地看出是256色的表面被强制作为24位的来显示后,由于显存中的数据只有要求的三分之一,导致显示出来的是三分之一大小的图像。

源码中创建调色板的函数:
if (palette)
                palette->Release(), palette=0;
       
        PALETTEENTRY pe[256];
        ZeroMemory( pe, sizeof(pe) );
        for( int i=0; i<ncolors; i++)
        {
                pe.peRed   = quad.rgbRed;
                pe.peGreen = quad.rgbGreen;
                pe.peBlue  = quad.rgbBlue;
        }

        HRESULT r=ddraw2->CreatePalette( DDPCAPS_8BIT | DDPCAPS_ALLOW256,
                                                                pe, &palette, 0 );
        if (r!=DD_OK)
        {
                TRACE("failed to create DirectDraw palette\n");
                return FALSE;
        }

        primsurf->SetPalette( palette );

现在就是想修改显示的图像的颜色深度。上面的函数创建了256色的调色板,直接修改这里好像不行。
在线急等,谢谢各位!

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2007-12-7 08:48:00 | 显示全部楼层

Re:【求助】怎么修改一个directdraw游戏的屏幕分辨率?

24位或者16位是不用调色板的.也能按照256色的规格每像素修改,因为每个象素占用的空间都不同了。

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-12-7 19:51:00 | 显示全部楼层

Re: 【求助】怎么修改一个directdraw游戏的屏幕分辨率?

楼主说的没错,上面的函数是创建了调色板,直接修改这里是没用的,
是用SetDisplayMode()函数来设置视频模式的,
比如设置16位色的1024*768模式,可以这样:lpdd->SetDisplayMode(1024,768,16,0,0);

2

主题

12

帖子

21

积分

注册会员

Rank: 2

积分
21
 楼主| 发表于 2007-12-9 11:23:00 | 显示全部楼层

Re:【求助】怎么修改一个directdraw游戏的屏幕分辨率?

谢谢各位!我现在也是像Ecust.mj这么改的,但看到d3dwindower可以通过修改显存数据来调整颜色深度,所以也想类似实现。继续研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 10:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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