资源简介
本程序借助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++
相关资源
- 二维码生成BMP
- Bmp图像处理.zip
- EAN13条码生成(C语言+VS2010)[包含EA
- MFC画图板,可以画一些基本图形,如
- 基于MFC的bmp图像处理268237
- 计算BMP24位真彩色图像PSNR的C++小程序
- mfc打开并显示BMP图片
- VC打开多种图像格式bmpjpggiftifraw
- 24位BMP图像用C++实现平移、旋转、镜像
- MFC中使用OpenCV显示选定文件夹中所有
- VC6基于对话框的BMP灰度图片显示和轮
- 数字图像处理 MFC bmp格式图片打开与保
- DICOM图片转换BMP的C++代码
- VC实现虚拟打印机的框架源代码
- jpeg jpg解码 C++
- [毕业分享] MFC实现数字图像处理软件
- VC++单文档视图打开bmp图片
- 在内存中将bmp转JPG
- vc++调用usb摄像头,进行拍照,保存为
- Bmp2jpeg图片格式转换
- jpg图片、png图片、24位/32位位图转25
- C语言读取BMP图像,并进行反色操作
- BMP180气压计STM32例程+51例程+数据手册
- 经典数字图像测试图灰度图,jpg,b
- 图像直方图均衡算法的实现 bmp格式
- 64位png2jpg
- bmp24位彩色图像转8位灰度图像纯C++
- 用VC++实现打开并显示bmp图片
- C++生成二维码并保存成BMP图片
- MFC显示JPG图片
评论
共有 条评论