dishiji 2014-12-09 13:15
浏览 819

DirectDraw Blt切图数据有错

LPDIRECTDRAWSURFACE7 lpDDSPrimary; // DDSCAPS_PRIMARYSURFACE主页面的指针

LPDIRECTDRAWSURFACE7 lpDDSBack1; // DDSCAPS_OFFSCREENPLAIN 离屏页面的指针
LPDIRECTDRAWSURFACE7 lpDDSBack2; // DDSCAPS_OFFSCREENPLAIN 离屏页面的指针
//由于字数限制,只先关键代码了
//创建表面,设置模式为全屏独占模式
ddsd.dwFlags = DDSD_CAPS //

ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_COMPLEX|DDSCAPS_FLIP|DDSCAPS_VIDEOMEMORY; //DDSCAPS_VIDEOMEMORY 只使用显存来创建
if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK )

return FALSE; //创建主页面

ddsd.dwSize = sizeof( ddsd );

ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;

ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //这是离屏页面

ddsd.dwHeight=FullScrenn_Height; //****************显示器高************************

ddsd.dwWidth=FullScrenn_Width; //******************显示器宽************************

if ( DD_OK != lpDD->CreateSurface(&ddsd,&lpDDSBack1, NULL))

return FALSE; //创建放背景图的页面

if ( DD_OK != lpDD->CreateSurface(&ddsd,&lpDDSBack2, NULL))

return FALSE; //创建放背景图的页面

测试1:lpDDSBack1使用StretchDIBits 填写像素全为1;lpDDSBack1使用StretchDIBits 填写像素全为2;
if(Tflag==1) { hRet = lpDDSPrimary->Blt(&rcclient,lpDDSBack1,NULL,DDBLT_WAIT,NULL); Tflag=0;}
else {hRet = lpDDSPrimary->Blt(&rcclient,lpDDSBack2,NULL,DDBLT_WAIT,NULL);Tflag=0;}
测试结果:校验显示器输出数据,要么全1,要么全2,数据正确
测试2:lpDDSBack1填写行像素相同,列像素递增的图,lpDDSBack2也一样,只是开始像素点不一样
测试结果:校验显示器输出数据,要么为Back1的数据,要么为Back2的数据,表明数据正确
测试3:lpDDBack1填写整个递增的图,即行递增列也递增的图,Back2也一样,也只是起点不一样
测试结果:校验显示器输出数据,显示Back1数据的时候 有时候会出现Back2的数据,同样,显示Back2数据的时候,也会出现Back1的数据,这是为什么了,急!!!!
Back1和Back2 使用StretchDIBits 只填写一次图像数据,

问题是 为何整个递增的图像会出现 一副图像含有一部分另一副图像的像素了

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?