资源简介
该程序用于pgm格式的图像读取与保存,C++编写,可直接运行,希望能够帮助到有需要的人。PGM格式的图像由头信息和数据信息构成。
代码片段和文件信息
#include < stdio.h >
#include < stdlib.h >
#include “pgm.h“
/**********************File I/O functions*******************************/
/***********************************************************************/
/*Gets an ascii pgm image file store as a color pgm.*/
void getPGMfile (char filename[] PGMImage *img)
{
FILE *in_file;
char ch;
int row col type;
int ch_int;
in_file = fopen(filename “r“);
if (in_file == NULL)
{
fprintf(stderr “Error: Unable to open file %s\n\n“ filename);
exit(8);
}
printf(“\nReading image file: %s\n“ filename);
/*determine pgm image type (only type three can be used)*/
ch = getc(in_file);
if(ch != ‘P‘)
{
printf(“ERROR(1): Not valid pgm/ppm file type\n“);
exit(1);
}
ch = getc(in_file);
/*convert the one digit integer currently represented as a character to
an integer(48 == ‘0‘)*/
type = ch - 48;
if((type != 2) && (type != 3) && (type != 5) && (type != 6))
{
printf(“ERROR(2): Not valid pgm/ppm file type\n“);
exit(1);
}
while(getc(in_file) != ‘\n‘); /* skip to end of line*/
while (getc(in_file) == ‘#‘) /* skip comment lines */
{
while (getc(in_file) != ‘\n‘); /* skip to end of comment line */
}
/*there seems to be a difference between color and b/w. This line is needed
by b/w but doesn‘t effect color reading...*/
fseek(in_file -1 SEEK_CUR); /* backup one character*/
fscanf(in_file“%d“ &((*img).width));
fscanf(in_file“%d“ &((*img).height));
fscanf(in_file“%d“ &((*img).maxVal));
printf(“\n width = %d“(*img).width);
printf(“\n height = %d“(*img).height);
printf(“\n maxVal = %d“(*img).maxVal);
printf(“\n“);
if (((*img).width > MAX) || ((*img).height > MAX))
{
printf(“\n\n***ERROR - image too big for current image structure***\n\n“);
exit(1);
}
if(type == 2) /*uncompressed ascii file (B/W)*/
{
for (row=(*img).height-1; row >=0; row--)
for (col=0; col< (*img).width; col++)
{
fscanf(in_file“%d“ &ch_int);
(*img).data[row][col].red = ch_int;
(*img).data[row][col].green = ch_int;
(*img).data[row][col].blue = ch_int;
}
}
else if(type == 3) /*uncompressed ascii file (color)*/
{
for (row=(*img).height-1; row >=0; row--)
for (col=0; col< (*img).width; col++)
{
fscanf(in_file“%d“ &ch_int);
((*img).data[row][col].red) = (unsigned char)ch_int;
fscanf(in_file“%d“ &ch_int);
((*img).data[row][col].green) = (unsigned char)ch_int;
fscanf(in_file“%d“ &ch_int);
((*img).data[row][col].blue) = (unsigned char)ch_int;
}
}
else if(type == 5) /*compressed file (B/W)*/
/*note: this type remains untested at this time...*/
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-10 14:56 pgm_read_save_c\
文件 5884 2018-10-10 14:55 pgm_read_save_c\pgm.c
文件 766 2018-10-10 14:55 pgm_read_save_c\pgm.h
相关资源
- c语言实现图像的旋转与平移
- MFC图像处理荧光检测算法代码
- 图像处理连通域算法 c++ vc 6.0
- vc++简易图形编辑器MFC
- C语言源代码学生成绩管理系统、图书
- C语言实现的图形化电梯仿真系统
- 中值滤波的c程序,附带图片
- OpenGL纹理贴图源程序.rar
- MFC图元的组合,拆分,移动源代码
- linux环境下C语言实现图片的socket传输
- C++画数学函数图象
- C语言 地图染色 非递归 源代码
- c语言编程中点画线法
- 计算机图形学实验二 opengl
- vc6显示网络图片
- 用MFC画直线椭圆矩型可选择线条颜色
- sobel算子实现度图像的边缘提取,x和
- 求有向图所有顶点的出度与入度
- 人员信息管理系统c++版超详细
- 基于聚类的医学图像分割法
- 树tree、动态数组dyArray、hashMap、拼图
- OpenGL载入3ds模型并在MFC视图窗口显示
- vc++&opencv图像分块
- 高效 C++ 屏幕找图 屏幕搜索 透明找
- 基于LSB的图片数据隐藏c++类
- c++求图的最短路径算法
- 图像批量格式转换jpg,bmp,tif,png小
- 基于QT的电子地图设计与实现
- vc++实现图像处理:中值滤波
- MRF2图像分割vc++代码
评论
共有 条评论