资源简介

单纯用C语言,而不是C++实现的数字图像处理。这里只是抛砖引玉,所以,只做了用C语言读入位图、保存位图等。当然包括获得位图的各种信息。
在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


评论

共有 条评论