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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
    • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
    • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
    • ¥15 帮我写一个c++工程
    • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
    • ¥15 关于smbclient 库的使用
    • ¥15 微信小程序协议怎么写
    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启