问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vc图像处理

发布网友 发布时间:2022-04-26 07:33

我来回答

1个回答

热心网友 时间:2022-06-25 08:33

BOOL ColortoGrayScale(HWND hWnd)//灰度变换
{
DWORD SrcBufSize,DstBufSize,DstLineBytes;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
BITMAPFILEHEADER DstBf;
BITMAPINFOHEADER DstBi;
LOGPALETTE *pPal;
HPALETTE hPrevPalette;
HLOCAL hPal;
DWORD NewNumColors;
WORD NewBitCount;
float Y;
DWORD i;
unsigned char Red,Green,Blue,Gray;

NewNumColors=NumColors;
NewBitCount=bi.biBitCount;
if(NumColors==0) //真彩色
{
NewNumColors=256;
NewBitCount=8;
}

DstLineBytes=(DWORD)WIDTHBYTES(bi.biWidth*NewBitCount);
DstBufSize=(DWORD)(sizeof(BITMAPINFOHEADER)+NewNumColors*sizeof(RGBQUAD)+(DWORD)DstLineBytes*bi.biHeight);
memcpy((char *)&DstBf,(char *)&bf,sizeof(BITMAPFILEHEADER));
memcpy((char *)&DstBi,(char *)&bi,sizeof(BITMAPINFOHEADER));
DstBf.bfSize=DstBufSize+sizeof(BITMAPFILEHEADER);
DstBf.bfOffBits=(DWORD)(NewNumColors*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)
+sizeof(BITMAPINFOHEADER));
DstBi.biClrUsed=0;
DstBi.biBitCount=NewBitCount;

SrcBufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);

if((hTempImgData=LocalAlloc(LHND,DstBufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}

lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);

//拷贝图片
memcpy(lpTempImgData,lpImgData,DstBufSize);
//重画
memcpy(lpTempImgData,(char *)&DstBi,sizeof(BITMAPINFOHEADER));

lpPtr=(char *)lpImgData+sizeof(BITMAPINFOHEADER);
lpTempPtr=(char *)lpTempImgData+sizeof(BITMAPINFOHEADER);

hPal=LocalAlloc(LHND,sizeof(LOGPALETTE) + NewNumColors* sizeof(PALETTEENTRY));
pPal =(LOGPALETTE *)LocalLock(hPal);
pPal->palNumEntries =(WORD) NewNumColors;
pPal->palVersion = 0x300;

if(NumColors==0) //真彩色
for (i = 0; i < 256; i++) {
pPal->palPalEntry[i].peRed=(BYTE)i;
pPal->palPalEntry[i].peGreen=(BYTE)i;
pPal->palPalEntry[i].peBlue=(BYTE)i;
pPal->palPalEntry[i].peFlags=(BYTE)0;
*(lpTempPtr++)=(unsigned char)i;
*(lpTempPtr++)=(unsigned char)i;
*(lpTempPtr++)=(unsigned char)i;
*(lpTempPtr++)=0;
}
else
for (i = 0; i < NewNumColors; i++) {
Blue=(unsigned char )(*lpPtr++);
Green=(unsigned char )(*lpPtr++);
Red=(unsigned char )(*lpPtr++);
Y=(float)((Red*30+Green*59+Blue*11+50)/100);
Gray=(BYTE)Y;
lpPtr++;
pPal->palPalEntry[i].peRed=Gray;
pPal->palPalEntry[i].peGreen=Gray;
pPal->palPalEntry[i].peBlue=Gray;
pPal->palPalEntry[i].peFlags=0;
*(lpTempPtr++)=(unsigned char)Gray;
*(lpTempPtr++)=(unsigned char)Gray;
*(lpTempPtr++)=(unsigned char)Gray;
*(lpTempPtr++)=0;
}

if(hPalette!=NULL)
DeleteObject(hPalette);

hPalette=CreatePalette(pPal);
LocalUnlock(hPal);
LocalFree(hPal);

hDc=GetDC(hWnd);
if(hPalette){
hPrevPalette=SelectPalette(hDc,hPalette,FALSE);
RealizePalette(hDc);
}

if(NumColors==0)
for(y=0;y<bi.biHeight;y++){
lpPtr=(char *)lpImgData+(SrcBufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(DstBufSize-DstLineBytes-y*DstLineBytes);
for(x=0;x<bi.biWidth;x++){
Blue=(unsigned char )(*lpPtr++);
Green=(unsigned char )(*lpPtr++);
Red=(unsigned char )(*lpPtr++);
Y=(float)((Red*50+Green*39+Blue*3+50)/100);//这里更改权重或者公式
Gray=(BYTE)Y;
*(lpTempPtr++)=(unsigned char)Gray;
}
}

if(hBitmap!=NULL)
DeleteObject(hBitmap);

hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT,
(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) +NewNumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);

if(hPalette && hPrevPalette){
SelectPalette(hDc,hPrevPalette,FALSE);
RealizePalette(hDc);
}

hf=_lcreat("c:\\Gray.bmp",0);
_lwrite(hf,(LPSTR)&DstBf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,DstBufSize);
_lclose(hf);

ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
BOOL Erosion(HWND hWnd,BOOL Hori)//图像腐蚀
{
DWORD BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
unsigned char num;
int i;

if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!","Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//copy image data
memcpy(lpTempImgData,lpImgData,BufSize);
if(Hori)
{
for(y=0;y<bi.biHeight;y++){
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes)+1;
for(x=1;x<bi.biWidth-1;x++){
num=(unsigned char)*lpPtr;
if (num==0){
*lpTempPtr=(unsigned char)0;
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+i-1);
if(num==255){
*lpTempPtr=(unsigned char)255;
break;
}
}
}
else *lpTempPtr=(unsigned char)255;
lpPtr++;
lpTempPtr++;
}
}
}
else{
for(y=1;y<bi.biHeight-1;y++){
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for(x=0;x<bi.biWidth;x++){
num=(unsigned char)*lpPtr;
if (num==0){
*lpTempPtr=(unsigned char)0;
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+(i-1)*LineBytes);
if(num==255){
*lpTempPtr=(unsigned char)255;
break;
}
}
}
else *lpTempPtr=(unsigned char)255;
lpPtr++;
lpTempPtr++;
}
}
}

if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT,
(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);

if(Hori)
hf=_lcreat("c:\\herosion.bmp",0);
else
hf=_lcreat("c:\\verosion.bmp",0);

_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);

ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
招商银行的美元天添金怎么样? 天添美蒸馒头为什么开裂呢 上海食堂送菜 邮政跨地区取款手续费多? 谁能告诉我邮政储蓄卡跨省取钱要不要收费啊? 自贡市龙盛世纪仿真模型制造有限公司公司简介 学PS真的很难吗 红烧萝卜牛筋 微信怎么转发公众号部分内容 转发公众号部分内容方法 微信公众号内的视频如何下载?一个F12搞定 vc图像处理 RC电路的微分方程怎么解出来? RC电路的微分方程怎么解出来? 【复变函数】 史上最全ppt 上 【复变函数】 史上最全ppt 上 求高手给常见函数的图像(最好是有word、PPT)的! 传递函数怎么使用拉普拉斯逆变换-MATLAB下 险意外险都有什么险种 快速傅里叶变换的要求 谁有拉普拉斯变换的课件或者ppt, 男士如何护肤 男性油性皮肤怎么保养? 男人如何护肤 怎么图形化数据库服务器cpu日志 男士正确的护肤步骤 男人怎么护肤? 传奇服务器开启时日志出现错误 如何在windows2008建立syslog服务器 大学男生如何护肤? 日志管理 大学电路的学习路线 量子物理的几个问题? 各类打印机所使用的耗材及可打印的材质(种类)有哪些 你如何看点考试开卷制度? 信息化在制造业中的应用 保管合同纠纷怎么处理 时域卷积带宽的计算 时域卷积带宽的计算 客家童谣歌词 天人宁许巧,剪水做花飞 怎么解释? 描写花的比喻句(排比句) 农村大妈做的韭花酱为什么好吃? 微信扫码转账能不能退回? 宁波公交车1跟511路开到晚上几点钟!! 宁波公交610-1发车间隔时间,每天几班 宁波公交车换乘1小时内不是免费吗? 2020年宁波公交一分今年有没有? 如何快速用PS制作彩色喜庆文字 宁波公交车路线求答案~~~! 宁波公交123路大概几分钟有一班呢?