資源簡介
圖像縮放的代碼,正文是雙三次插值,用宏屏蔽掉的部分是雙線性插值,
代碼均來源于網(wǎng)絡(luò),我只是做了一些整理工作

代碼片段和文件信息
//?ScaleTest.cpp?:?定義控制臺應(yīng)用程序的入口點(diǎn)。
//
#include?“stdafx.h“
#include????
#include??????
#include??????
#include??????
#include???
#include//時間相關(guān)頭文件,可用其中函數(shù)計算圖像處理速度??
#define???WIDTHBYTES(bits)?(((bits)+31)/32*4)//用于使圖像寬度所占字節(jié)數(shù)為4byte的倍數(shù)??
#define?MYDRAW_WIDTH 1920??//目標(biāo)圖像寬度??
#define?MYDRAW_HEIGHT 1080??//目標(biāo)圖像高度??
float?a?=?-0.5; //?BiCubic基函數(shù)
typedef?unsigned?char??BYTE;
typedef?unsigned?short?WORD;
typedef?unsigned?long??DWORD;
typedef?long?LONG;
//位圖文件頭信息結(jié)構(gòu)定義??
//其中不包含文件類型信息(由于結(jié)構(gòu)體的內(nèi)存結(jié)構(gòu)決定,要是加了的話將不能正確讀取文件信息)??
typedef?struct?tagBITMAPFILEHEADER?{
DWORD??bfSize;??????????//文件大小??
WORD???bfReserved1;?????//保留字,不考慮??
WORD???bfReserved2;?????//保留字,同上??
DWORD??bfOffBits;???????//實(shí)際位圖數(shù)據(jù)的偏移字節(jié)數(shù),即前三個部分長度之和??
}?BITMAPFILEHEADER;
//信息頭BITMAPINFOHEADER,也是一個結(jié)構(gòu),其定義如下:??
typedef?struct?tagBITMAPINFOHEADER?{
//public:??
DWORD???biSize;?????????????//指定此結(jié)構(gòu)體的長度,為40??
LONG????biWidth;????????????//位圖寬??
LONG????biHeight;???????????//位圖高??
WORD????biPlanes;???????????//平面數(shù),為1??
WORD????biBitCount;?????????//采用顏色位數(shù),可以是1,2,4,8,16,24,新的可以是32??
DWORD???biCompression;??????//壓縮方式,可以是0,1,2,其中0表示不壓縮??
DWORD???biSizeImage;????????//實(shí)際位圖數(shù)據(jù)占用的字節(jié)數(shù)??
LONG????biXPelsPerMeter;????//X方向分辨率??
LONG????biYPelsPerMeter;????//Y方向分辨率??
DWORD???biClrUsed;??????????//使用的顏色數(shù),如果為0,則表示默認(rèn)值(2^顏色位數(shù))??
DWORD???biClrImportant;?????//重要顏色數(shù),如果為0,則表示所有顏色都是重要的??
}?BITMAPINFOHEADER;
void?main()
{
long?now?=?0;
now?=?clock();//存儲圖像處理開始時間??
BITMAPFILEHEADER?bitHead?writebitHead;
BITMAPINFOHEADER?bitInfoHead?writebitInfoHead;
FILE*?pfile;//輸入文件??
FILE*?wfile;//輸出文件??
char?strFile[50]?=?“demo.bmp“;//打開圖像路徑,BMP圖像必須為24位真彩色格式??
char?strFilesave[50]?=?“16.bmp“;//處理后圖像存儲路徑??
fopen_s(&pfile?strFile?“rb“);//文件打開圖像??
fopen_s(&wfile?strFilesave?“wb“);//打開文件為存儲修改后圖像做準(zhǔn)備??
//讀取位圖文件頭信息??
WORD?fileType;
fread(&fileType?1?sizeof(WORD)?pfile);
fwrite(&fileType?1?sizeof(WORD)?wfile);
if?(fileType?!=?0x4d42)
{
printf(“file?is?not?.bmp?file!“);
return;
}
//讀取位圖文件頭信息??
fread(&bitHead?1?sizeof(tagBITMAPFILEHEADER)?pfile);
writebitHead?=?bitHead;//由于截取圖像頭和源文件頭相似,所以先將源文件頭數(shù)據(jù)賦予截取文件頭??
//讀取位圖信息頭信息??
fread(&bitInfoHead?1?sizeof(BITMAPINFOHEADER)?pfile);
writebitInfoHead?=?bitInfoHead;//同位圖文件頭相似??
//為截取文件重寫位圖高度
writebitInfoHead.biHeight?=?MYDRAW_HEIGHT;??
//為截取文件重寫位圖寬度
writebitInfoHead.biWidth?=?MYDRAW_WIDTH;??
//?一行大小?(32位對齊)
int?mywritewidth?=?WIDTHBYTES(writebitInfoHead.biWidth*writebitInfoHead.biBitCount);//BMP圖像實(shí)際位圖數(shù)據(jù)區(qū)的寬度為4byte的倍數(shù),在此計算實(shí)際數(shù)據(jù)區(qū)寬度??
writebitInfoHead.biSizeImage?=?mywritewidth*writebitInfoHead.biHeight;//計算位圖實(shí)際數(shù)據(jù)區(qū)大小??
writebitHead.bfSize?=?54?+?writebitInfoHead.biSizeImage;//位圖文件頭大小為位圖數(shù)據(jù)區(qū)大小加上54byte??
fwrite(&writebitHead?1?sizeof(tagBITMAPFILEHEADER)?wfile);//寫回位圖文件頭信息到輸出文件??
fwrite(&writebitInfoHead?1?sizeof(BITMAPINFOHEADER)?wfile);//寫回位圖信息頭信息到輸出文件??
//?原圖分辨率
int?width?=?bitIn
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2397??2017-12-07?10:29??ScaleTest\Debug\ScaleTest.Build.CppClean.log
?????文件????????446??2017-12-07?10:29??ScaleTest\Debug\ScaleTest.log
?????文件????1200054??2017-12-06?10:17??ScaleTest\demo.bmp
?????文件????2359296??2017-12-07?10:19??ScaleTest\ipch\scaletest-2ce03064\scaletest-152ae574.ipch
?????文件???????1567??2017-12-06?10:06??ScaleTest\ReadMe.txt
?????文件??????10923??2017-12-07?10:28??ScaleTest\ScaleTest.cpp
?????文件????????884??2017-12-06?10:07??ScaleTest\ScaleTest.sln
????..A..H.?????10752??2017-12-07?10:29??ScaleTest\ScaleTest.suo
?????文件???????4370??2017-12-06?10:07??ScaleTest\ScaleTest.vcxproj
?????文件???????1313??2017-12-06?10:07??ScaleTest\ScaleTest.vcxproj.filters
?????文件????????143??2017-12-06?10:06??ScaleTest\ScaleTest.vcxproj.user
?????文件????????214??2017-12-06?10:06??ScaleTest\stdafx.cpp
?????文件????????233??2017-12-06?10:06??ScaleTest\stdafx.h
?????文件????????236??2017-12-06?10:06??ScaleTest\targetver.h
?????目錄??????????0??2017-12-07?10:30??ScaleTest\ipch\scaletest-2ce03064
?????目錄??????????0??2017-12-07?10:30??ScaleTest\Debug
?????目錄??????????0??2017-12-07?10:30??ScaleTest\ipch
?????目錄??????????0??2017-12-07?11:47??ScaleTest
-----------?---------??----------?-----??----
??????????????3592828????????????????????18
評論
共有 條評論