91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 900KB
    文件類型: .gz
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-05
  • 語言: C/C++
  • 標簽: 圖像文件??bmp??jpg??png??

資源簡介

本程序借助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/

評論

共有 條評論