64,654
社区成员
发帖
与我相关
我的任务
分享
bool Graph::HandleBuffer(int tx,int ty)
{
DDSURFACEDESC2 ddsd, ddsd2;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ZeroMemory(&ddsd2, sizeof(ddsd2));
ddsd2.dwSize = sizeof(ddsd2);
lpOBuf[1]->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
lpOBuf[3]->Lock(NULL,&ddsd2,DDLOCK_WAIT,NULL);
DWORD surface_width = ddsd.dwWidth;
DWORD surface_height = ddsd.dwHeight;
BYTE *Bitmap = (BYTE*)ddsd.lpSurface;
BYTE *p = Bitmap;
LONG l_pitch = ddsd.lPitch;
DWORD byteCounts=ddsd.ddpfPixelFormat.dwRGBBitCount/8;
int y,x;
for (y=0;y<surface_height;y++)
{
p = Bitmap+byteCounts*surface_width+y*l_pitch;
for (x=0;x<surface_width;x++)
{
*(p)*=0.6f;
*(p+1)*=0.6f;
*(p+2)*=0.6f;
}
}
BYTE *Bitmap2 = (BYTE*)ddsd2.lpSurface;
BYTE* p2=Bitmap2;
LONG l_pitch2 = ddsd2.lPitch;
DWORD byteCounts2=ddsd2.ddpfPixelFormat.dwRGBBitCount/8;
DWORD surface_width2 = ddsd2.dwWidth;
DWORD surface_height2 = ddsd2.dwHeight;
int i=0;
for (y=ty;y<ty+surface_height;y++)
{
p = Bitmap+byteCounts*surface_width+i*l_pitch;
p2 = Bitmap2+byteCounts2*surface_width2+y*l_pitch2;
for (x=tx;x<tx+surface_width;x++)
{
*(p2)*=0.4f;
*(p2)+=*p;
*(p2+1)*=0.4f;
*(p2+1)+=*(p+1);
*(p2+2)*=0.4f;
*(p2+2)+=*(p+2);
p2+=4;
p+=4;
}
i++;
}
lpOBuf[3]->Unlock(NULL);
lpOBuf[1]->Unlock(NULL);
RECT bgs;
SetRect(&bgs,0,0,384,288);
draw->BltToBBuffer(0,0,lpOBuf[3],bgs,false);
}
//这里指针可是没有移动啊
for (x=0;x<surface_width;x++)
{
*(p)*=0.6f;
*(p+1)*=0.6f;
*(p+2)*=0.6f;
}