游戏开发论坛

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

截图出现的问题

[复制链接]

7

主题

36

帖子

40

积分

注册会员

Rank: 2

积分
40
QQ
发表于 2004-5-1 17:12:00 | 显示全部楼层 |阅读模式
我创建的是16位的显示模式,代码如下:
BOOL SaveSurfacetoBitmap(LPDIRECTDRAWSURFACE7 lpdds,char * pszFileName)
{
        BYTE* lpBuffer;                        // 表面指针
        int nPitch;                         // 表面跨距
        int nWidth, nHeight;                // 表面宽高
        int nImage;
       
        FILE* fp;
        if( (fp=fopen(pszFileName, "wb")) != NULL )
        {
                // 锁定表面
                DDSURFACEDESC2 ddsd;
                memset(&ddsd,0,sizeof(ddsd));
                ddsd.dwSize = sizeof(ddsd);
                HRESULT hr = lpdds->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL );
                if( hr == DD_OK )
                {
                          lpBuffer = (BYTE *)ddsd.lpSurface;
                        nWidth = ddsd.dwWidth;
                        nHeight = ddsd.dwHeight;
                        nPitch = ((nWidth*16 + 31)>>5)<<2;        
                        nImage = nPitch*nHeight;
                }

                // 保存文件头
                BITMAPFILEHEADER FileHeader;
                FileHeader.bfType = 'BM';
                FileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
                FileHeader.bfReserved1 = 0;
                FileHeader.bfReserved2 = 0;
               
                // 保存文件信息
                BITMAPINFOHEADER Header;
                Header.biSize = sizeof(BITMAPINFOHEADER);        // 结构的大小
                Header.biWidth = nWidth;                                        // 宽
                Header.biHeight = nHeight;                                        // 高
                Header.biPlanes = 1;                                                // 固定
                Header.biBitCount = 16;                                                // 颜色数
                Header.biCompression = BI_RGB;                                // 是否压缩
                Header.biSizeImage = nImage;        // 图片的大小
                Header.biXPelsPerMeter = 0;
                Header.biYPelsPerMeter = 0;
                Header.biClrUsed = 0;
                Header.biClrImportant = 0;

                FileHeader.bfSize = nImage + FileHeader.bfOffBits;

                fwrite(&FileHeader,1, sizeof(BITMAPFILEHEADER),fp);
                fwrite(&Header,1,sizeof(BITMAPINFOHEADER),fp);

                const BYTE * pImage = lpBuffer + (nHeight-1)*nPitch;
                for(int j=0; j<nHeight; ++j)
                {
                        fwrite(pImage,1,nPitch,fp);
                        pImage -= nPitch;
                }
                fclose(fp);

                hr = lpdds->Unlock( NULL );
                return true;
        }

        return false;
}
不知道是哪里出现了问题,我用经典的那个保存代码也不行,保存后的图片大小是对,就是不出图像,哪位高手指点一下? 在线等...... [em24]

7

主题

36

帖子

40

积分

注册会员

Rank: 2

积分
40
QQ
 楼主| 发表于 2004-5-1 18:50:00 | 显示全部楼层

Re:截图出现的问题

不用了 搞定了  是BM写反了 ^_^
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-30 16:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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