PPM文件是一种图像文件,其结构简单,适合用于菜鸟学习图像处理的原理。
PPM文件主要是由两部分组成,头部分和数据部分。
头部信息一般如下:
Px :P是固定字符,x是一个整数,一般x=5表示黑白图片,x=6表示彩色图片
sizeX sizeY:sizeX,sizeY分别表示图片的大小,单位是像素
maxColor :这个是用来表示颜色的取值范围,一般用unsigned char类型,大小为255
数据信息一般用一个数组保存,黑白数据信息一般如下:
ch1 ch2 ch3 ch4 ... chx :sizeX*sizeY个数据范围为 [0 ~ maxColor] 的数据
彩色数据信息一般如下:
rgb rgb rgb ... rgb :sizeX*sizeY*3个数据范围为 [0 ~ maxColor] 的数据
下面是生成一张渐变的图片,运行完后再D盘根目录下生成homework1.ppm文件,这个文件可以用ps打开浏览。
#include <cstdio>
#include <cstdlib>
class _ppm
{
private :
int pX; //类型
int sizeX,sizeY; //大小
unsigned char maxColor; //颜色范围
unsigned char *image; //保存像素
public :
~_ppm ()
{
if (image != NULL)
free (image);
image = NULL;
}
void write_image (char *ch);
void creat_image ();
};
void _ppm::write_image (char *ch)
{//图片输出路径
FILE *fp = fopen (ch, "wb");
fprintf (fp, "P%d\n%d\n%d\n%d\n", pX, sizeX, sizeY, maxColor);
if (pX == 5)
{
fwrite (image, sizeof (unsigned char), sizeX * sizeY, fp);
}
else if (pX == 6)
{
fwrite (image, sizeof (unsigned char), sizeX * sizeY * 3, fp);
}
fclose (fp);
fp = NULL;
}
void _ppm::creat_image ()
{//构造一张图片
pX = 5; //黑白图片
sizeX = 256;//长度
sizeY = 64;//宽度
maxColor = 255;//色彩范围
image = (unsigned char *) calloc (sizeX * sizeY, sizeof (unsigned char));
for (int i = 0; i < sizeY; i++)
{
for (int j = 0; j < sizeX; j++)
{
image[i * sizeX + j] = j;
}
}
}
int main ()
{
_ppm img;
img.creat_image ();
img.write_image ("D://homework1.ppm");
return 0;
}