环境是win2k
vc++6.0
目的显示半透明的位图。
我买了一本书《动感设计》是里面的例子。我看懂了就是做不出来。照书上的做就有错误。请大家帮帮我解决呀!我放在网上呢?不大。
http://www.sdj.cc/tm.zip解决了发到我的邮箱里或发到这里大家一起看吧
[email protected]
vc++6.0
目的显示半透明的位图。
我买了一本书《动感设计》是里面的例子。我看懂了就是做不出来。照书上的做就有错误。请大家帮帮我解决呀!我放在网上呢?不大。
http://www.sdj.cc/tm.zip解决了发到我的邮箱里或发到这里大家一起看吧
[email protected]
canvasFrame::limpid(CDC *dc)
{
BITMAP bm;
int x,y,s,t,m,i=0;
GetClientRect(&rect);
mdc = new CDC;
bitmap = new CBitmap;
bgbmp = new CBitmap;
mdc->CreateCompatibleDC(dc);
bgbmp->m_hObject = (HBITMAP)::LoadImage(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);
unsigned char *px = new unsigned char[bm.bmHeight*bm.bmWidthBytes];
bitmap->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);
s = bm.bmHeight;
t = bm.bmWidth;
m = bm.bmWidthBytes;
for(y=0;y<bm.bmHeight;y++)
for(x=0;x<bm.bmWidth;x++)
{
px[x*3+y*bm.bmWidthBytes] *= 0.5;
px[x*3+1+y*bm.bmWidthBytes] *= 0.5;
px[x*3+2+y*bm.bmWidthBytes] *= 0.5; }
bitmap->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);
bgbmp->GetObject(sizeof(BITMAP),&bm);
unsigned char *py = new unsigned char[bm.bmHeight*bm.bmWidthBytes];
bgbmp->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,py);
for(y=100;y<100+s;y++)
{
i = (y-100)*m;
for(x=100;x<100+t;x++)
{
py[x*3+y*bm.bmWidthBytes] = py[x*3+y*bm.bmWidthBytes]*0.5 + px[i];
py[x*3+1+y*bm.bmWidthBytes] = py[x*3+1+y*bm.bmWidthBytes]*0.5 + px[i+1];
py[x*3+2+y*bm.bmWidthBytes] = py[x*3+2+y*bm.bmWidthBytes]*0.5 + px[i+2];
i=i+3;
}
}
bgbmp->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,py);
mdc->SelectObject(bgbmp);
delete px;
delete py;
}
可能是这里有问题。我用到bm.bmHeight的时候。输入完bm.后面的就没有自动提示。
我运行了一下,没什么错误阿
下次请写清楚错误情况还有
“我认为是错的地方。BITMAP bm;
可能是这里有问题。我用到bm.bmHeight的时候。输入完bm.后面的就没有自动提示。
”没有提示就把.ncb文件删除,重新编译,就出来了
要终止程序,请单击“确定”
要调试程序,请单击“取消”
可能是这里有问题。我用到bm.bmHeight的时候。输入完bm.后面的就没有自动提示。
没有提示就把.ncb文件删除,重新编译,就出来了》
////////////////////////////////////////
for(y=0;y<bm.bmHeight;y++)
for(x=0;x<bm.bmWidth;x++)
{
px[x*3+y*bm.bmWidthBytes] = (unsigned char)px[x*3+y*bm.bmWidthBytes] * 0.5;
px[x*3+1+y*bm.bmWidthBytes] = (unsigned char)px[x*3+1+y*bm.bmWidthBytes] * 0.5;
px[x*3+2+y*bm.bmWidthBytes] = (unsigned char)px[x*3+2+y*bm.bmWidthBytes] * 0.5;
}
/////////////////////////////////////////////////////////////
在这里你越界访问内存我改了一下
///////////////////////
for(y=0;y<bm.bmHeight-2;y++)
for(x=0;x<bm.bmWidth;x++)
{
px[x*3+y*bm.bmWidthBytes] = (unsigned char)px[x*3+y*bm.bmWidthBytes] * 0.5;
px[x*3+1+y*bm.bmWidthBytes] = (unsigned char)px[x*3+1+y*bm.bmWidthBytes] * 0.5;
px[x*3+2+y*bm.bmWidthBytes] = (unsigned char)px[x*3+2+y*bm.bmWidthBytes] * 0.5;
}
////////////////////////////////////////////////
但是没有你想要的效果
你说你可以运行。你可以把,你编译好了的程序,给我发过来吗?我想看看,是什么效果。
[email protected]
“
px[x*3+y*bm.bmWidthBytes] *= 0.5;
px[x*3+1+y*bm.bmWidthBytes] *= 0.5;
px[x*3+2+y*bm.bmWidthBytes] *= 0.5;
py[x*3+y*bm.bmWidthBytes] = py[x*3+y*bm.bmWidthBytes]*0.5 + px[i];
py[x*3+1+y*bm.bmWidthBytes] = py[x*3+1+y*bm.bmWidthBytes]*0.5 + px[i+1];
py[x*3+2+y*bm.bmWidthBytes] = py[x*3+2+y*bm.bmWidthBytes]*0.5 + px[i+2]; ”
你运行了,我看到了你给我发的邮件,那张图片怎么那么难看呀!