MFC 中把彩色图片修改为黑白照片。。可是就是修改不出来。。。。!!!!!!各位大哥帮帮小弟;代码如下

CBitmapbitmap;BITMAPbmp;bitmap.LoadBitmap(IDB_BITMAPHOME);bitmap.GetBitmap(&bmp);CDCd... CBitmap bitmap;
BITMAP bmp;
bitmap.LoadBitmap(IDB_BITMAPHOME);
bitmap.GetBitmap(&bmp);

CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);

dcCompatible.SelectObject(&bitmap);
for(int i=0;i!=bmp.bmWidth;++i)/////////////////////问题就在这里。。。搞不清楚怎样做。。。。。
{
for(int j=0;j!=bmp.bmHeight;++j)
{
//arrymax[i][j]=pDC->GetPixel(i,j);
if(pDC->GetPixel(i,j)!=0)
{
pDC->SetPixel(i,j,(0,0,0));
}
else
{
pDC->SetPixel(i,j,(0,0,255));

}
}
}

CRect rect;
GetClientRect(&rect);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

}

输出的颜色就是一种。。。。。改不出来我要的黑白照片啊。。。。。。。。
展开
 我来答
匿名用户
2011-03-05
展开全部
3.15 icePub_imgToBmp

l 函数原型:
int WINAPI icePub_imgToBmp(char *strImgFilename,char *strBmpFilename,int huiFlag)
输入:strImgFilename 各种图像格式文件名
strBmpFilename bmp图像名
huiFlag 灰度化标志
输出:

l VC连接Lib方式声明
__declspec(dllexport)
int WINAPI icePub_imgToBmp(char *strImgFilename,char *strBmpFilename,int huiFlag);

l 动态调用例程
VC sample代码:
typedef int (WINAPI ICEPUB_IMGTOBMP)(char *strImgFilename,char *strBmpFilename,int huiFlag);
ICEPUB_IMGTOBMP *icePub_imgToBmp = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_imgToBmp = (ICEPUB_IMGTOBMP *)GetProcAddress(hDLLDrv, "icePub_imgToBmp");
}

icePub_imgToBmp("a.png","a.bmp",1);
icePub_imgToBmp("b.jpg","b.bmp",1);
icePub_imgToBmp("c.gif","c.bmp",1);

3.16 icePub_imgToSingleBmp

l 函数原型:
int WINAPI icePub_imgToSingleBmp(char *strImgFilename,char *strBmpFilename,int thresholdValue)
输入:strImgFilename 待处理图像文件名
strBmpFilename bmp图像名
thresholdValue 256级灰度值的阈值(函数会先将图像转换成灰度再根据thresholdValue做黑白2值化)
输出:

l VC连接Lib方式声明
__declspec(dllexport)
int WINAPI icePub_imgToSingleBmp(char *strImgFilename,char *strBmpFilename,int thresholdValue);

l 动态调用例程
VC sample代码:

typedef int (WINAPI ICEPUB_IMGTOSINGLEBMP)(char *strImgFilename,char *strBmpFilename,int thresholdValue);
ICEPUB_IMGTOSINGLEBMP *icePub_imgToSingleBmp = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_imgToSingleBmp=(ICEPUB_IMGTOSINGLEBMP *)GetProcAddress(hDLLDrv,"icePub_imgToSingleBmp");
}
if(icePub_imgToSingleBmp)
{
icePub_imgToSingleBmp("my24.bmp","single1.bmp",150);
icePub_imgToSingleBmp("my.jpg","single2.bmp",150);
icePub_imgToSingleBmp("my.png","single3.bmp",150);
}

if(hDLLDrv)
FreeLibrary(hDLLDrv);
追问
55555555555555!!!!!!!!!!没看懂。。。。。。。。

参考资料: http://icese.net/read.php?tid=8499

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
捡到的幸福
2011-03-05 · TA获得超过1282个赞
知道小有建树答主
回答量:568
采纳率:0%
帮助的人:359万
展开全部
改称这样试试
for(int i=0;i!=bmp.bmWidth;++i)/////////////////////问题就在这里。。。搞不清楚怎样做。。。。。
{
COLORREF rgb = pDC->GetPixel(i,j);
BYTE r = GetRValue(rgb);
BYTE g = GetGValue(rgb);
BYTE b = GetBValue(rgb);

BYTE gray = (BYTE) (0.28965 * r + 0.60581 * g + 0.10454 * b);
pDC->SetPixel(i,j,RGB(gray,gray,gray)); }
追问
谢谢你。。。。。。可惜没成功。。。。。。。。
55555555555555555!!!!!!!!!!!!
加载为彩照。。。。。。修改出来还是彩照。。。。。。。。。。。。
追答
可以吧程序发给我帮你看看吗?

我知道你是哪里错了。
你搞错了pDC 和dc,这样试试
for(int i=0;i!=bmp.bmWidth;++i)/////////////////////问题就在这里。。。搞不清楚怎样做。。。。。
{
COLORREF rgb = dc.GetPixel(i,j);
BYTE r = GetRValue(rgb);
BYTE g = GetGValue(rgb);
BYTE b = GetBValue(rgb);

BYTE gray = (BYTE) (0.28965 * r + 0.60581 * g + 0.10454 * b);
dc.SetPixel(i,j,RGB(gray,gray,gray));
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式