資源簡介
自己修改讀入圖片路徑
代碼片段和文件信息
#include?“Windows.h“
#include?
#include?
//using?namespace?std;
//?動態申請二維內存(指針數組)的函數
template?
void?NewArr(T**&?Array?int?row?int?line)
{
????????Array?=?new?T*[row];
????????for?(int?i?=?0;?i?!=?row;?i++)
????????{
????????????????Array[i]?=?new?T[line];
????????????????memset(Array[i]?0?sizeof(T)?*?line);
????????}
}
//?動態釋放二維內存的函數
template
void?DeleteArray?(T**&?Array?int?line)
{
????????for?(int?i?=?0;?i?????????{
????????????????delete[]?Array[i];
????????????????Array[i]?=?NULL;
????????}
????????delete[]?Array;
????????Array?=?NULL;
}
//?函數說明
//?path?文件圖片的絕對地址
//?bf?bi作為兩個輸出參數?函數內部完成初始化
//?lpBit?圖像數據?一個超級大的二維數組(一級指針數組)?可以丟一個空指針進去?函數內部代為申請內存
void?ReadBitmap(const?char*?path?BITMAPFILEHEADER&?bf?BITMAPINFOHEADER&?bi?unsigned?char**&?lpBit)
{
????????FILE*?fp?=?fopen(path?“rb“);
????????if?(fp?==?NULL)
?????????{??printf(“沒有找到需要轉換的圖片“);?
????exit(0);
?????????}?????
????????fread(&bf?sizeof(BITMAPFILEHEADER)?1?fp);?//?寫入文件頭
????????fread(&bi?sizeof(BITMAPINFOHEADER)?1?fp);?//?寫入信息頭
????????NewArr(lpBit?bi.biHeight?(bi.biWidth?*?3?+?3)?/?4?*?4);
????????for?(int?i?=?0;?i?????????????????for?(int?j?=?0;?j?(bi.biWidth?*?3?+?3)?/?4?*?4;?j++)
????????????????????????fread(&lpBit[i][j]?sizeof(unsigned?char)?1?fp);?//?每次讀入一個字節
????????fclose(fp);
}
//?函數說明
//?path?文件圖片的絕對地址
//?bf?bi作為兩個輸入參數
//?lpBit?圖像數據?經過ReadBitmap初始化后作為輸入參數
void?WriteBitmap(const?char*?path?BITMAPFILEHEADER&?bf?BITMAPINFOHEADER&?bi?unsigned?char**&?lpBit?BYTE?limit)
{
????????FILE*?fp;
????????fp?=?fopen(path?“wb“);
????????if?(fp?==?NULL)
????????????????exit(0);
????????BITMAPFILEHEADER?newbf;?//?初始化文件頭
????????memcpy(&newbf?&bf?sizeof(BITMAPFILEHEADER));
????????int?newbfWidth?=?(bi.biWidth?+?3)?/?4?*?4;?//?4字節補齊
????????int?newbfImageSize?=?newbfWidth?*?bi.biHeight;?//?位圖數據實際大小
????????newbf.bfOffBits?=?sizeof(BITMAPFILEHEADER)?+?sizeof(BITMAPINFOHE
- 上一篇:C語言上機考試經典100題--南開大學出品
- 下一篇:操作系統的模擬實現 C++編寫
評論
共有 條評論