还是先熟悉了VC++吧!
关于图像处理方面的内容建议看看:图像处理程序设计(杨淑莹)清晰版+源码
#include <windows.h>BOOL BMP24to8(char *szSourceFile,char *szTargetFile)
int main(int argc,char* argv[])
{
//调用这个函数直接把24位真彩色灰度化
BOOL stat=BMP24to8("c://source.bmp","c://target.bmp")
return 0
}
BOOL BMP24to8(char *szSourceFile,char *szTargetFile)
{
HANDLE hSourceFile=INVALID_HANDLE_VALUE
HANDLE hTargetFile=INVALID_HANDLE_VALUE
DWORD dwSourceSize=0,dwTargetSize=0
PBYTE pSource=NULL,pTarget=NULL
hSourceFile=CreateFile(szSourceFile,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)
if(hSourceFile==INVALID_HANDLE_VALUE)
return FALSE
dwSourceSize=GetFileSize(hSourceFile,NULL)
pSource=(PBYTE)VirtualAlloc(NULL,dwSourceSize,MEM_COMMIT,PAGE_READWRITE)
//分配空间失败或者文件太小(BMP文件不可能小于54个字节)
if(pSource==NULL||dwSourceSize<=54)
{
CloseHandle(hSourceFile)
return FALSE
}
DWORD dwTemp=0
ReadFile(hSourceFile,pSource,dwSourceSize,&dwTemp,NULL)
BITMAPFILEHEADER *pSourceFileHeader=(BITMAPFILEHEADER*)pSource
BITMAPINFOHEADER *pSourceInfoHeader=(BITMAPINFOHEADER*)(pSource+sizeof(BITMAPFILEHEADER))
//不是BMP文件或者不是24位真彩色
if(pSourceFileHeader->bfType!=0x4d42||pSourceInfoHeader->biBitCount!=24)
{
CloseHandle(hSourceFile)
VirtualFree(pSource,NULL,MEM_RELEASE)
return FALSE
}
CloseHandle(hSourceFile)
LONG nWidth=pSourceInfoHeader->biWidth
LONG nHeight=pSourceInfoHeader->biHeight
LONG nSourceWidth=nWidth*3
//这里是因为BMP规定保存时长度和宽度必须是4的整数倍,如果不是则要补足
if(nSourceWidth%4)
nSourceWidth=(nSourceWidth/4+1)*4
LONG nTargetWidth=nWidth
if(nTargetWidth%4)
nTargetWidth=(nTargetWidth/4+1)*4
dwTargetSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256+nHeight*nTargetWidth
pTarget=(PBYTE)VirtualAlloc(NULL,dwTargetSize,MEM_COMMIT,PAGE_READWRITE)
memset(pTarget,0,dwTargetSize)
if(pTarget==NULL)
{
VirtualFree(pTarget,NULL,MEM_RELEASE)
return FALSE
}
BITMAPFILEHEADER *pTargetFileHeader=(BITMAPFILEHEADER *)pTarget
BITMAPINFOHEADER *pTargetInfoHeader =
(BITMAPINFOHEADER *)(pTarget+sizeof(BITMAPFILEHEADER))
pTargetFileHeader->bfType=pSourceFileHeader->bfType
pTargetFileHeader->bfSize=dwTargetSize
pTargetFileHeader->bfReserved1=0
pTargetFileHeader->bfReserved2=0
pTargetFileHeader->bfOffBits=sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256
pTargetInfoHeader->biBitCount=8
pTargetInfoHeader->biClrImportant=0
pTargetInfoHeader->biClrUsed=256
pTargetInfoHeader->biCompression=BI_RGB
pTargetInfoHeader->biHeight=pSourceInfoHeader->biHeight
pTargetInfoHeader->biPlanes=1
pTargetInfoHeader->biSize=sizeof(BITMAPINFOHEADER)
pTargetInfoHeader->biSizeImage=nHeight*nTargetWidth
pTargetInfoHeader->biWidth=pSourceInfoHeader->biWidth
pTargetInfoHeader->biXPelsPerMeter=pSourceInfoHeader->biXPelsPerMeter
pTargetInfoHeader->biYPelsPerMeter=pSourceInfoHeader->biYPelsPerMeter
RGBQUAD *pRgb
for(int i=0i<256i++)//初始化8位灰度图的调色板信息
{
pRgb = (RGBQUAD*)(pTarget+sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+i*sizeof(RGBQUAD))
pRgb->rgbBlue=i
pRgb->rgbGreen=i
pRgb->rgbRed=i
pRgb->rgbReserved=0
}
for (int m=0m<nHeightm++)//转化真彩色图为灰度图
{
for(int n=0n<nWidthn++)
{
pTarget[pTargetFileHeader->bfOffBits+m*nTargetWidth+n] =
pSource[pSourceFileHeader->bfOffBits+m*nSourceWidth+n*3]*0.114
+pSource[pSourceFileHeader->bfOffBits+m*nSourceWidth+n*3+1]*0.587
+pSource[pSourceFileHeader->bfOffBits+m*nSourceWidth+n*3+2]*0.299
}
}
hTargetFile = CreateFile(szTargetFile,GENERIC_WRITE,FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
BOOL stat=WriteFile(hTargetFile,pTarget,dwTargetSize,&dwTemp,NULL)
CloseHandle(hTargetFile)
VirtualFree(pSource,NULL,MEM_RELEASE)
VirtualFree(pTarget,NULL,MEM_RELEASE)
return stat
}
新华书店文轩上搜索到一本书,供你参考VC++图像处理程序设计
作者:杨淑莹 编著
出版:北京交大 出版日期:2010年04月
本书介绍了各种数字图像处理的算法及编程实现技术。全书由13章和一个附录组成。主要内容包括:位图基础、图像的显示、图像的几何变换、图像灰度变换、图像的平滑处理、图像锐化处理及边缘检测、图像分割及测量、图像的形态处理学、图像的变换域处理及应用、图像的合成、24位彩色图像的处理、图像的小波变换和JPEG图像的压缩编码。 本书介绍了近90种图像处理的技术,这些技术与编程实例相结合,提供了VC++编程步骤,图像处理的编程代码,并且处理前的图像可与处理之后的图像对照比较。实例程序的框架结构简单,代码简
机械工程、过程装备与控制工程、机械电子工程、能源与动力工程、新能源科学与工程、天津理工大学计算机科学与工程学院、信息与计算科学、信息安全、工学、物联网工程等专业。截至2020年11月,学校有专业学院15个,还设有继续教育学院、工程训练中心、体育教学部,开办本科专业65个。
截至2020年11月,学校拥有一级学科博士后科研流动站2个,一级学科博士点3个,一级学科硕士点22个、二级学科硕士点69个、硕士专业学位授权类别11个,天津市重点学科12个。
历史沿革
学校前身是天津理工学院,于1979年以天津大学理工分校名义开始招收本科生,1981年经国务院批准正式设立。
1996年,原天津理工学院与原天津理工学院一分院(天津大学机电分校)、天津理工学院二分院(天津大学分校)、天津大学冶金分校合并,组建新的天津理工学院。2004年,经教育部批准,天津理工学院更名为天津理工大学。
截至2021年3月,学校占地面积159.42万平方米、建筑面积76.96万平方米;本科以上全日制在校生28000余人;设有专业学院15个,开办本科专业66个。
拥有博士后科研流动站2个、一级学科博士点3个、一级学科硕士点22个、二级学科硕士点69个、专业硕士学位授权类别4个、专业硕士学位授权领域17个。截至2021年3月,学校有专任教师1878人、外聘教师380人。
以上内容参考:百度百科-天津理工大学
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)