資源簡介
單純用C語言,而不是C++實現的數字圖像處理。這里只是拋磚引玉,所以,只做了用C語言讀入位圖、保存位圖等。當然包括獲得位圖的各種信息。
在VC6.0下,無誤通過編譯。
在VC6.0下,無誤通過編譯。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?“BMP.h“
BITMAPFILEHEADER?bmfh;
BITMAPINFOHEADER?bmih;
BYTE?*imgData;
bool?bReadBMFH=false;
bool?bReadBMIH=false;
bool?bReadPixel=false;
//檢查路徑是否合法:文件能打開;以bmp為后綴名
int?CheckFilePath(char?*filepath);
//讀入位圖的文件頭
int?ReadFileHeader(char?*filepathBITMAPFILEHEADER?*bmfh);
//打印位圖的文件頭
void?PrintFileHeader(BITMAPFILEHEADER?*bmfh);
//讀入位圖的信息頭
int?ReadInfoHeader(char?*filepathBITMAPINFOHEADER?*bmih);
//打印位圖的信息頭
void?PrintInfoHeader(BITMAPINFOHEADER?*bmih);
//創建8位位圖的調色板
int?CreatePalette(RGBQUAD?pal[]);
//讀入位圖的像素數據
int?ReadPixelData(char?*filepathBYTE?*imgData);
//計算每行像素所占的字節數
LONG?GetLineBytes(int?imgWidthint?bitCount);
//打印位圖的像素數據
void?PrintPixelData(BYTE?*imgDataint?widthint?heightint?bitCount);
//打印菜單選項
void?PrintMenu();
//另存為位圖
int?SaveAsImage(char?*filepath);
//顯示位圖
void?ShowImage(char?*?filepath);
int?main()
{
char?filepath[256];
char?saveasfilepath[256];
int?i;
int?width;
int?height;
int?bitCount;
DWORD?dwLineBytes;
int?select;
int?q=0;
system(“echo?off“);
system(“color?2“);
printf(“-----------TIMimage-----------\n“);
printf(“Input?the?path?of?the?BMP?file:\n“);
gets(filepath);
i=CheckFilePath(filepath);
if(i==-1)
{
return?-1;
}
do?
{
PrintMenu();
scanf(“%u“&select);
switch(select)
{
case?0:
{
printf(“Input?the?path?of?the?BMP?file:\n“);
scanf(“%s“filepath);
CheckFilePath(filepath);
break;
}
case?1:
{
i=ReadFileHeader(filepath&bmfh);
if(i!=-1)
{
printf(“Read?the?file?header?successfully.\n“);
bReadBMFH=true;
break;
}
else
{
printf(“Read?the?file?header?failed.\n“);
bReadBMFH=false;
q=1;
break;
}
}
case?2:
{
i=ReadInfoHeader(filepath&bmih);
if(i!=-1)
{
printf(“Read?the?info?header?successfully.\n“);
bReadBMIH=true;
break;
}
else
{
printf(“Read?the?info?header?failed.\n“);
bReadBMIH=false;
q=1;
break;
}
}
case?3:
{
if(!bReadBMIH)
{
printf(“Please?read?the?info?header?at?first.\n“);
break;
}
height=bmih.biHeight;
width=bmih.biWidth;
bitCount=bmih.biBitCount;
dwLineBytes=GetLineBytes(widthbitCount);
imgData=(BYTE*)malloc(dwLineBytes*height*sizeof(BYTE));
if(!imgData)
{
printf(“Can?not?allocate?memory?for?the?image.\n“);
q=1;
break;
}
i=ReadPixelData(filepathimgData);
if(i==-1)
{
printf(“Read?the?pixel?data?failed.\n“);
bReadPixel=false;
q=1;
break;
}
else
{
printf(“Read?the?pixel?data?successfully.\n“);
bReadPixel=true;
break;
}
}
case?4:
{
if(bReadBMFH)
{
PrintFileHeader(&bmfh);
break;
}
else
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????959??2009-03-05?13:45??TIMimage\BMP.h
?????文件??????15788??2009-03-05?20:40??TIMimage\TIMimage.cpp
?????文件???????4382??2009-03-05?13:40??TIMimage\TIMimage.dsp
?????文件????????548??2009-03-05?11:04??TIMimage\TIMimage.dsw
?????文件??????58368??2009-03-05?20:48??TIMimage\TIMimage.ncb
?????文件??????48640??2009-03-05?20:48??TIMimage\TIMimage.opt
?????文件???????1254??2009-03-05?20:40??TIMimage\TIMimage.plg
?????目錄??????????0??2009-03-05?20:48??TIMimage
-----------?---------??----------?-----??----
???????????????129939????????????????????8
- 上一篇:C語言 學生信息管理系統 源代碼
- 下一篇:用c語言編寫的學生選課系統
評論
共有 條評論