
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);
}
输出的颜色就是一种。。。。。改不出来我要的黑白照片啊。。。。。。。。 展开
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);
}
输出的颜色就是一种。。。。。改不出来我要的黑白照片啊。。。。。。。。 展开
2个回答
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);
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改称这样试试
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)); }
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));
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询