vc++ 1.读取位图2.循环判断该位图每个像素颜色(从左上到右下)并根据颜色给一个int二维数组赋值 求高手指点 50
本人菜鸟要具体代码位图在C盘根目录如果像素颜色是红色给数组赋值为1000,白色15,黑色0,其他颜色2000代码测试之后正确给分...
本人菜鸟 要具体代码
位图在C盘根目录
如果像素颜色是红色给数组赋值为1000,白色15,黑色0,其他颜色2000
代码测试之后正确给分 展开
位图在C盘根目录
如果像素颜色是红色给数组赋值为1000,白色15,黑色0,其他颜色2000
代码测试之后正确给分 展开
1个回答
展开全部
这个不难,给你以前写的一段代码你去修改下测试吧,可以用的:
void SetupRegion(CDC *pDC,/*窗体的DC指针*/CBitmap &cBitmap/*位图对象*/,COLORREF TransColor/*透明色*/)
{
CDC memDC; //创建与传入DC兼容的临时DC
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(cBitmap);
CRgn wndRgn; //创建总的窗体区域,初始region为0
wndRgn.CreateRectRgn(0,0,0,0);
BITMAP bit;
cBitmap.GetBitmap(&bit);//取得位图参数,这里要用到位图的长和宽
int y,x;
for(y=0;y<=bit.bmHeight;y++)
{
for(x=0;x<=bit.bmWidth;x++)
{
if(memDC.GetPixel(x,y)!=TransColor)
{
CRgn rgnTemp; //保存临时region
rgnTemp.CreateRectRgn(x,y,x+1,y+1); //创建一个包含起点与重点间高为1像素的临时"region"
wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR); //合并到主"region".
rgnTemp.DeleteObject();
}
}
}
this->SetWindowRgn(wndRgn,TRUE);
this->SetForegroundWindow();
}
void SetupRegion(CDC *pDC,/*窗体的DC指针*/CBitmap &cBitmap/*位图对象*/,COLORREF TransColor/*透明色*/)
{
CDC memDC; //创建与传入DC兼容的临时DC
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(cBitmap);
CRgn wndRgn; //创建总的窗体区域,初始region为0
wndRgn.CreateRectRgn(0,0,0,0);
BITMAP bit;
cBitmap.GetBitmap(&bit);//取得位图参数,这里要用到位图的长和宽
int y,x;
for(y=0;y<=bit.bmHeight;y++)
{
for(x=0;x<=bit.bmWidth;x++)
{
if(memDC.GetPixel(x,y)!=TransColor)
{
CRgn rgnTemp; //保存临时region
rgnTemp.CreateRectRgn(x,y,x+1,y+1); //创建一个包含起点与重点间高为1像素的临时"region"
wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR); //合并到主"region".
rgnTemp.DeleteObject();
}
}
}
this->SetWindowRgn(wndRgn,TRUE);
this->SetForegroundWindow();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询