资源简介
本程序借助libpng和libjpeg库 ,以C++类的方式实现linux下对png jpg和bmp常见类型的图像文件的读写。要在程序中显示图像可自行用opengl或其他方式完成。
代码片段和文件信息
#include“bmp.h“
#include“ImageHandler.h“
#include “include.h“
CBMPHandler::CBMPHandler()
{
}
CBMPHandler::~CBMPHandler()
{
}
int CBMPHandler::WriteBMPfile(const char* filename CImageInfo &img)
{
FILE* pWritingFile=NULL;
pWritingFile = fopen(filename “wb“);
if( pWritingFile == NULL )
{
perror(“fopen“);
return -1;
}
//计算图像字节数
unsigned int PixelDataLength=img.GetSize();
BITMAPFILEHEADER FileHeader; //接受位图文件头
BITMAPINFOHEADER InfoHeader; //接受位图信息头
FileHeader.bfType=BITMAP_ID; //ID设置为位图的id号
FileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); //实际图像数据的位置在文件头和信息头之后
FileHeader.bfReserved1=0; //必须设置为0
FileHeader.bfReserved2=0; //必须设置为0
FileHeader.bfSize=PixelDataLength+FileHeader.bfOffBits; //BMP图像文件大小
InfoHeader.biXPelsPerMeter = 0; //水平分辨率,这里暂时设为0就是
InfoHeader.biYPelsPerMeter = 0; //垂直分辨率,这里暂时设为0就是
InfoHeader.biClrUsed = 0; //图像使用的颜色,这里暂时设为0就是
InfoHeader.biClrImportant = 0; //重要的颜色数,这里暂时设为0就是 //垂直分辨率,这里暂时设为0就是
InfoHeader.biPlanes=1; //必须设置为1
InfoHeader.biCompression=0; //设置为BI_RGB时表示图像并没有彩色表
InfoHeader.biBitCount=img.GetChannels()*8; //图像的位数
InfoHeader.biSize=sizeof(BITMAPINFOHEADER); //结构体的大小
InfoHeader.biHeight=img.GetHeight();
InfoHeader.biWidth=img.GetWidth();
InfoHeader.biSizeImage=PixelDataLength;
CImageInfo tmp=img;
tmp.ConvergeOrder();//转化为 bgr(A)
fwrite(&FileHeader sizeof(BITMAPFILEHEADER) 1 pWritingFile);
fwrite(&InfoHeader sizeof(BITMAPINFOHEADER) 1 pWritingFile);
fwrite(tmp.GetData() InfoHeader.biSizeImage 1 pWritingFile);
// 释放内存和关闭文件
fclose(pWritingFile);
return 0;
}
int CBMPHandler::ReadBMPfile(const char* filenameCImageInfo *img)
{
FILE* pWritingFile = fopen(filename “rb“);
if( pWritingFile == NULL )
{
perror(“fopen“);
return -1;
}
BITMAPFILEHEADER FileHeader; //接受位图文件头
BITMAPINFOHEADER InfoHeader; //接受位图信息头
fread(&FileHeader sizeof(BITMAPFILEHEADER) 1 pWritingFile);
fread(&InfoHeader sizeof(BITMAPINFOHEADER) 1 pWritingFile);
char buf[1024];
fread(bufFileHeader.bfOffBits-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER)1pWritingFile);
//获取图像宽度,高度,大小
int width=InfoHeader.biWidth;
int height=InfoHeader.biHeight;
int PixelDataLength=FileHeader.bfSize-FileHeader.bfOffBits;
int Channels=InfoHeader.biBitCount/
- 上一篇:图书管理系统 C语言设计源代码和实验报告
- 下一篇:走迷宫程序C++
相关资源
- c语言 bmp图片显示
- bmp图片灰度化二值化
- C语言解码JPG图片源代码
- raw格式转换为bmp格式包括代码,lena
- 读bmp图像像素存txt并输出bmp图像
- VC6.0打开BMP位图程序白色彩色皆可
- 24位RGB数据保存为BMP图片
- bmp280的读取C语言
- 本例程采用VC++ 实现JPG格式图片的打开
- vs2010 MFC tabctrl控件重载, 实现标签加
- C语言读取BMP文件
- bmp 图片转YUV420数组
- bmp格式图片转换为raw格式
- RAW格式图像转换为BMP格式
- jpg jpeg 解码 转 bmp RGB vs2013 c++
- C编写的读取BMP文件的程序
- C/C++语言图像处理:各种滤波
- c++ bmp位图修改读取头文件
- MFC数字图像处理BMP格式读取 保存 DF
- 通过封装的opencv函数进行yuv.nv12到jp
- C中如何显示bmp文件,教你C语言编程的
- VC++图片控件(Picture Control)显示资源
- ffmpeg视频生成jpg图片
- C++实战源码-将AVI动画分解成BMP位图
- C++实战源码-浏览大幅BMP图片
- jpg里藏压缩包
- bmp、jpg、gif图片隐写
- C++实战源码-将BMP位图组合成AVI动画
- c++ 连续的bmp图片转avi
- BMP图像处理程序,包括轮廓识别,图
评论
共有 条评论