|
|
小弟初学编游戏,看了visual c++游戏设计入门
第2章第7个例子关于半透明运算的例子运行错误,请大家帮忙,万分感谢
就是做数组运算的时候出错,不知道哪有问题
BITMAP bm; //声明bm为BITMAP数据结构
int x,y,i=0;
GetClientRect(&rect);
mdc = new CDC;
bitmap = new CBitmap;
bgbmp = new CBitmap;
mdc->CreateCompatibleDC(dc); //建立与dc兼容的DC
bgbmp->m_hObject = (HBITMAP): oadImage(NULL,"bground.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE); //载入背景图
bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"girl.bmp",IMAGE_BITMAP,298,329,LR_LOADFROMFILE); //载入源位图
bitmap->GetObject(sizeof(BITMAP),&bm); //取得 bitmap 位图的信息
unsigned char *px = new unsigned char[bm.bmHeight*bm.bmWidthBytes]; //声明暂存数组
bitmap->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px); //取得源位图各像素点的 RGB 值存入 px 数组中
for(y=0;y<bm.bmHeight;y++)
for(x=0;x<bm.bmWidth;x++)
{
px[x*3+y*bm.bmWidthBytes] *= 0.5; //将 B 色彩值乘以 50%
px[x*3+1+y*bm.bmWidthBytes] *= 0.5; //将 G 色彩值乘以 50%
px[x*3+2+y*bm.bmWidthBytes] *= 0.5; //将 R 色彩值乘以 50%
}
bgbmp->GetObject(sizeof(BITMAP),&bm); //取得 bgbmp 位图的信息
unsigned char *px1 = new unsigned char[bm.bmHeight*bm.bmWidthBytes]; //声明暂存数组
bgbmp->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1); //取得源位图各像素点的 RGB 值存入 px1 数组中
for(y=20;y<=348;y++)
for(x=150;x<=447;x++)
{
px1[x*3+y*bm.bmWidthBytes] = px1[x*3+y*bm.bmWidthBytes]*0.5 + px; //将 B 色彩值乘以 50% 并与 px 相加
px1[x*3+1+y*bm.bmWidthBytes] = px1[x*3+1+y*bm.bmWidthBytes]*0.5 + px[i+1];//将 G 色彩值乘以 50% 并与 px 相加
px1[x*3+2+y*bm.bmWidthBytes] = px1[x*3+2+y*bm.bmWidthBytes]*0.5 + px[i+2];//将 R 色彩值乘以 50% 并与 px 相加
i=i+3;
}
bgbmp->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1); //重设背景图的颜色
mdc->SelectObject(bgbmp); //选择位图对象到mdc中
delete px;
delete px1;
|
|