资源简介
单纯用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语言编写的学生选课系统
相关资源
- 用c语言编写的学生选课系统
- C语言 学生信息管理系统 源代码
- c语言小学生自然数四则运算测试程序
- 我的C语言寒假作业-学生通讯录系统(
- c语言程序设计报告 程序大全
- 用C语言实现高效日志
- 用VC6.0实现多边形扫描线填充算法
- c语言编写的货郎担算法
- C语言实现十进制转十六进制
- 串口通讯技术实现--两台pc机通过串口
- C语言版3D魔方游戏源代码
- 文件传输和聊天程序(c语言实现)
- DSDEMO-C演示(数据结构C语言版 严蔚敏
- 编译原理实验-词法分析(c语言代码)
- C语言中 文件读取和写入的详细操作代
- 连铸温度场计算程序(C++)
- C语言进阶——嵌入式系统高级C语言编
- 6自由度机器人运动学正反解C++程序
- 谭浩强C语言word版12171
- Em算法(使用C++编写)
- 基于C语言实现的网络爬虫(搜索引擎
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- TC2.0DOSBOX
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- VC助手 VC6.0助手
- c++素数筛选法
评论
共有 条评论