From eb95c5674d43eb93955caf0689dcfea3dcf68d04 Mon Sep 17 00:00:00 2001 From: SunnyGor Date: Mon, 9 Jan 2023 09:45:43 +0800 Subject: [PATCH] v2 --- bmp.c | 42 ++++++----- bmp.exe | Bin 44289 -> 44801 bytes bmp_copy_demo.c | 180 ++++++++++++++++++++++++++++++++++++++++++++++ bmp_copy_demo.exe | Bin 0 -> 44289 bytes 4 files changed, 204 insertions(+), 18 deletions(-) create mode 100644 bmp_copy_demo.c create mode 100644 bmp_copy_demo.exe diff --git a/bmp.c b/bmp.c index 5edcd51..d0735d3 100644 --- a/bmp.c +++ b/bmp.c @@ -28,12 +28,20 @@ struct BmpInfoHeader { #pragma pack() -void bmpWrite(const char* name, const uch* raw_img, uint32_t width, uint32_t height, uint16_t bits) +void bmpWrite(const char* name, const uch* raw_img, uint32_t width, uint32_t height, uint16_t bits, const char* old_name, double radio) { if(!(name && raw_img)) { perror("Error bmpWrite."); return; } + + unsigned long oldWidth, oldHeight, oldSize, newWidth, newHeight, newSize; + oldWidth = width; + oldHeight = height; + + newWidth = ((int)(oldWidth * radio) + 3) / 4 * 4;//图像显示不出来原因在于图像长或宽不是4的倍数 保证得到的宽高是4的倍数 + newHeight = ((int)(oldHeight * radio) + 3) / 4 * 4; + // 檔案資訊 struct BmpFileHeader file_h = { .bfTybe=0x4d42, @@ -41,7 +49,7 @@ void bmpWrite(const char* name, const uch* raw_img, uint32_t width, uint32_t hei .bfReserved2=0, .bfOffBits=54, }; - file_h.bfSize = file_h.bfOffBits + width*height * bits/8; + file_h.bfSize = file_h.bfOffBits + newWidth*newHeight * bits/8; if(bits==8) {file_h.bfSize+= 1024, file_h.bfOffBits+= 1024;} // 圖片資訊 struct BmpInfoHeader info_h = { @@ -53,10 +61,10 @@ void bmpWrite(const char* name, const uch* raw_img, uint32_t width, uint32_t hei .biClrUsed=0, .biClrImportant=0, }; - info_h.biWidth = width; - info_h.biHeight = height; + info_h.biWidth = newWidth; + info_h.biHeight = newHeight; info_h.biBitCount = bits; - info_h.biSizeImage = width*height * bits/8; + info_h.biSizeImage = newWidth*newHeight * bits/8; if(bits == 8) {info_h.biClrUsed=256;} // 寫入檔頭 FILE *pFile = NULL; @@ -88,20 +96,18 @@ void bmpWrite(const char* name, const uch* raw_img, uint32_t width, uint32_t hei fwrite((char*)&raw_img[idx*3 +1], sizeof(char), sizeof(uch), pFile); fwrite((char*)&raw_img[idx*3 +0], sizeof(char), sizeof(uch), pFile); - unsigned long oldWidth, oldHeight, oldSize, newWidth, newHeight, newSize; + // unsigned long oldWidth, oldHeight, oldSize, newWidth, newHeight, newSize; - oldWidth = width; - oldHeight = height; + // oldWidth = width; + // oldHeight = height; unsigned char *sourceData = (unsigned char*)malloc(oldSize);//该指针指向源位图文件图像数据的内存空间 - fseek(src_file, 54, SEEK_SET);//使文件的指针指向文件的第55个字节 - fread(sourceData, oldSize, 1, src_file);//将src_file中的图像数据存储到sourceData指向的内存空间 - - double radio = 1.0;// test 倍數 + fseek(old_name, 54, SEEK_SET);//使文件的指针指向文件的第55个字节 + fread(sourceData, oldSize, 1, old_name);//将src_file中的图像数据存储到sourceData指向的内存空间 - newWidth = ((int)(oldWidth * radio) + 3) / 4 * 4;//图像显示不出来原因在于图像长或宽不是4的倍数 下面这一步可以保证得到的宽高是4的倍数 - newHeight = ((int)(oldHeight * radio) + 3) / 4 * 4; + // newWidth = ((int)(oldWidth * radio) + 3) / 4 * 4;//图像显示不出来原因在于图像长或宽不是4的倍数 下面这一步可以保证得到的宽高是4的倍数 + // newHeight = ((int)(oldHeight * radio) + 3) / 4 * 4; - //10.使用最邻近插值算法进行图片缩放 + //10.使用最邻近插值算法进行图片缩放 unsigned int x,y,X,Y;//源位图文件像素点宽高和目标位图文件像素点宽高 unsigned char *destData = (unsigned char*)malloc(newSize);//该指针指向目标位图文件图像数据的内存空间 unsigned char *sourceWhere, *destWhere;//修改像素的对应位置 @@ -186,9 +192,9 @@ void Imgraw_Read(const Imgraw* _this, const char* name) { const Imgraw* p = _this; bmpRead(name, &p->data, &p->width, &p->height, &p->bits); } -void Imgraw_Writ(const Imgraw* _this, const char* name) { +void Imgraw_Writ(const Imgraw* _this, const char* name, const char* old_name) { const Imgraw* p = _this; - bmpWrite(name, p->data, p->width, p->height, p->bits); + bmpWrite(name, p->data, p->width, p->height, p->bits, old_name, 1.0); } /*==============================================================*/ int main(int argc, char const *argv[]) { @@ -197,7 +203,7 @@ int main(int argc, char const *argv[]) { // 讀圖 Imgraw_Read(&img, "./input/bw2x1.bmp"); // 寫圖 - Imgraw_Writ(&img, "./output/bw2x1(output).bmp"); + Imgraw_Writ(&img, "./output/bw2x1(output).bmp", "./input/bw2x1.bmp"); return 0; } /*==============================================================*/ \ No newline at end of file diff --git a/bmp.exe b/bmp.exe index 1cdba70622a1f6502e4483b3b88e00e09961c6fe..8a885925840f3780015e424769924ef04ebe60b3 100644 GIT binary patch delta 4164 zcmb_feRNah8GrAaq>XKwgf?IoI}I_m5`?AYrl%Hig$YQm#-_vOf;jpBHy=u92K<_)KogzJl|Tp0;7Z{P z_K(07$qP~uzE8J3ZtC2ZvXE}6M>^V(3LK2RYa-3VXg;LL9oR{ebsj_;2m8-nX7f+>dRXuGguUVL`9`Mx>|0M@Z+OkmhQm6v zUe2g5v;N%PLS@calAq0e0o88b=PE9A{A+rAh>F61Bn*D9v6!uKtzI+Gqhl)c5mm|=YZTg;g7*+P5yT>4n~)vENR$ls0^*_$8vOkXBaC8C zE_z?WUJ^#P_m90W7$YrMp)QaRDym8^X+=#@+9eIZ+t7c#X2ahLynf<6II(n1t9X3Bzn- zoE*zRs=hx2NefR#v^9FDBP4u%tcm@?%%tX@Xt`AI z15QODz-q=^VdYTvtdPdI?hy6A;18K6~Hkz6%|cKgTe(RCIP{caN$M= z&x?_aA9Fl;N51crfA$tjZ1gy?xwKe14paB@l&! zK|vxiEu3C`#*#F zG2F&}cKO4%iJ9Ep;LzPMc>xk7;lTBm0htDsx;yBkY0#{*aF?N5m(TUXS2`>Ab4X3v z%3X!uBxQ0Z;cU`OZZ~N4+1wLwpMJVIJp=t+F^aZF(f0coB`RhKnE{*i9!<#t->?G) z^;2h`l|NZzOO^k) zfpkOGT~@3uOL}{`OWEq(I5rld8kC!dyrV2d?7gdKs_0o`NKnyhBR#(4KXW+&!9{%6 z!ZlO<=W29e(_UqLiK`vOXU=mwUWB!m@#*PLeY7w0+$AdZH5PD^$sZ7U_L=@U^_FMe zN1q};v=Z(_W$ef1uu;XE@PHGnQJA<02_cg)dM0^fZhLNsx@2o>BSKs@Ax^ykOotIyGLv#D=X1+rAf}^1k#k?qE1vh|8Erp-=U6Uj)pcE!d_a z=Ev7#ga%Ygi~I6UD8Mx29mDn@;+9^IqvdevzB}kI4nnf4gbo~nO4q&S{hi@3-Z+F5 z>y3-_YGT1DkL_3|^t!AX8QE#jb?Le-4Xbrz)p`Hf#kxKRCg3M6=FEA!^eeg zI{Z3V1v@pq0mZ^hTHOm9aB%d&E5aj`?}G$)iRS!?aQJudqWc!8ciZUlAauBk>B%5m zap%**Q;<8yN~=%7<8$n^dy-4O<>D=N7nx^wL08>vaCco|PhROuX_MF%OijlUB^qwh zs7?#6o~~>a*Zow9B3D}1&oTL1*A}ZEj!Pu?%v%WCXM|kC)|_-bMT?j9hcQaoip5W^ zM9fTl#UoNPYnIj3Af+5Dgixa5vheeK1~hM*41*im(gu;H!8Y+X8KLcZ*y^=X9J+CE zB`Yf&u6o_nlY%RAvqKH#_3HHcl&H0`vWN$v7$s^SC7!LXOm~^0P-buinhC`yQRqkt zm^WU{apCv$c;u}NI)U;!QmUs!F;U?m6U^V_HhEJ2lVQ9WIyPNRw3r!#<-rb(+kOB; z{scJV`>kd^qXXwng$ zbxn_?Y&z_0sPqOLQ5cJS4GPxdzk+d9TaXf(KxspY1^=#$V_s%b6DV&Zr87o}Cc%Xt z?vWt>gk{Ib2PhZZYNOZ5hiu}_Gh2ZWjt605k8T!%A zLwmE8cJk1V!`D2>INa$3-S%}Rd4m4e(Dha)?Ad;mmO7yocxrUQ85}%LP`AjGIN|Rt zR$AnQ9@g%3({dhq zaoFO7gk5~Pb^`h80oKU^Do#ya8$@?zr{|$00*9QOq delta 3283 zcmZuz4^Wfm8GpYw2}Fn_!SH8*8Zt}}E#!+CquTRA$QQvw%i*6=wFegU9H-(OPR_|c zBTAZsfe$L8*0eHb6%dGrY~48o3e~M0I?wC;!_k}D;^Zc`(yq1FetX`;0J-aT_kK^_ z-}8I^zR&mNs~Mv;4`^duoXzt4VseO(e{qD2lTa?4qY1=J2+41HKb`(5tm(nUuxlpV zt8kg&9c~Gi0ll1oTMlDfT!bYI;k~#NxK=_4eVtnk8>xZIhf2J!hl|tzzoBXvqcL0o ze1+IAVS&WJm4jVk070ULN=YvzJfut4(JMx9Nq-VwW+cS%HMjqh5nGZJ^CBbCBsmK2 zW+Ob58tGyq%$3Ur>#aD8b44kb7nS!;Bzk@_>CK5i zO<5Y0gv6-<;u5S%CHg0hKV-CTJW*JZOK7X@_f=WWsvKB?Rqmt=uWCc8f?48O`C7~-s$RIu zOg}^(ng$pwQPyui<1%BMMusmJWoH}>@de!k+I6!Uo+jBHrIx6n6J=>6=S%U+dPF{ zwQPFpi!uOjD(2^fAowiRe_#e|hii=j&AHowuFkH=sY&wQU(8CF;4tzEoUFq!Siy+k zWvM-5_N>mOtv-?$N!}I0lYMs_yC*qE#UxQWKl)x2S<|t*=NM_C8mN-z=7U+eDC(z( zxP(iyXW>aQ>`^YFUnau|rI!0E^eU~~CHO|El9>6{(1 z)JwQ9C{@RDYN%7^N!K|h%+)kU=9FkuR`pH^^n{mzm zKonP_oXw$`eo_L$tQT3x*)p3$3*dR?BH3QV&x1O99xSz5XkR<*v96?b9nfiwrtS_H zw(4Ym?hwTU=(a2bMV6fQcR+O30y^0N=~>HVwoXx$FkM&%I%mO>JK^1|NT*wR;NLQ1*OE`i7fb@3nc~%NikTU``|)&^FF3ST`UaH~eD`Vzn;JsC#Z@0R z8my#pj%Oei4+Xljar&#GG!?ja__6?{b@ zwK^OcYIGDu4+^c)w?pxw#!ihY+{Ix7py;qvU!)2|D=hS9&^3(&;-keohfDNYb%4qO z?#3`((@20is)9JjiwrIPz0XwM!l*&W?-0qG7vKbp`_+(p#I7;o2ZrA`pqQKo7mvIM zCoxRH`j7(kO+SM1V`1=V?Pb|gh67g<3+J0cU!u!l{AeFF#`r2napRa>KdKKnW(8#7 zvGf}PNFbCu22$$mRGaK?Su&igE2(nh7s59pIz+mHkXCl)`1Lfy>0nkt z$PGjqr;$JcTKqHi7x_6JdmPKuQ|0_Hl#{}WrXSNr6BIS+WQ`_dy)5~4R6TE6#Z(!` zb+R^}s{3#Z7*9&UQX_@RZY9+7H{3PtF)N7c{tfxK=Vv6*=nZQJm}Aq&}tJLKV#3xm|^es zvv*D-EMgVD17>%-cvtB!wv!e-pR;DV7tiOcPE#Ia@fBM1^Kj@aM&#i>ic35g&oxl3 u3Hs0VXu5*f_Y@c;29CblK$CfhK5wSP1i9yRG}Z)r&%0?X?}>CjkN7{=4#1oM diff --git a/bmp_copy_demo.c b/bmp_copy_demo.c new file mode 100644 index 0000000..048bdf4 --- /dev/null +++ b/bmp_copy_demo.c @@ -0,0 +1,180 @@ +#include +#include +#include +typedef unsigned char uch; + +// 檔案結構 +#pragma pack(2) +struct BmpFileHeader { + uint16_t bfTybe; + uint32_t bfSize; + uint16_t bfReserved1; + uint16_t bfReserved2; + uint32_t bfOffBits; +}; +struct BmpInfoHeader { + uint32_t biSize; + uint32_t biWidth; + uint32_t biHeight; + uint16_t biPlanes; // 1=defeaul, 0=custom + uint16_t biBitCount; + uint32_t biCompression; + uint32_t biSizeImage; + uint32_t biXPelsPerMeter; // 72dpi=2835, 96dpi=3780 + uint32_t biYPelsPerMeter; // 120dpi=4724, 300dpi=11811 + uint32_t biClrUsed; + uint32_t biClrImportant; +}; +#pragma pack() + + +void bmpWrite(const char* name, const uch* raw_img, + uint32_t width, uint32_t height, uint16_t bits) +{ + if(!(name && raw_img)) { + perror("Error bmpWrite."); + return; + } + // 檔案資訊 + struct BmpFileHeader file_h = { + .bfTybe=0x4d42, + .bfReserved1=0, + .bfReserved2=0, + .bfOffBits=54, + }; + file_h.bfSize = file_h.bfOffBits + width*height * bits/8; + if(bits==8) {file_h.bfSize+= 1024, file_h.bfOffBits+= 1024;} + // 圖片資訊 + struct BmpInfoHeader info_h = { + .biSize=40, + .biPlanes=1, + .biCompression=0, + .biXPelsPerMeter=0, + .biYPelsPerMeter=0, + .biClrUsed=0, + .biClrImportant=0, + }; + info_h.biWidth = width; + info_h.biHeight = height; + info_h.biBitCount = bits; + info_h.biSizeImage = width*height * bits/8; + if(bits == 8) {info_h.biClrUsed=256;} + // 寫入檔頭 + FILE *pFile = NULL; + // pFile = fopen(name,"wb+"); + fopen_s(&pFile, name,"wb+"); + if(!pFile) { + perror("Error opening file."); + return; + } + fwrite((char*)&file_h, sizeof(char), sizeof(file_h), pFile); + fwrite((char*)&info_h, sizeof(char), sizeof(info_h), pFile); + // 寫調色盤 + if(bits == 8) { + for(unsigned i = 0; i < 256; ++i) { + uch c = i; + fwrite((char*)&c, sizeof(char), sizeof(uch), pFile); + fwrite((char*)&c, sizeof(char), sizeof(uch), pFile); + fwrite((char*)&c, sizeof(char), sizeof(uch), pFile); + fwrite("", sizeof(char), sizeof(uch), pFile); + } + } + // 寫入圖片資訊 + size_t alig = ((width*bits/8)*3) % 4; + for(int j = height-1; j >= 0; --j) { + for(unsigned i = 0; i < width; ++i) { + uint32_t idx = j*width +i; + if(bits == 24) { // RGB圖片 + fwrite((char*)&raw_img[idx*3 +2], + sizeof(char), sizeof(uch), pFile); + fwrite((char*)&raw_img[idx*3 +1], + sizeof(char), sizeof(uch), pFile); + fwrite((char*)&raw_img[idx*3 +0], + sizeof(char), sizeof(uch), pFile); + } else if(bits == 8) { // 灰階圖 + fwrite((char*)&raw_img[idx], + sizeof(char), sizeof(uch), pFile); + } + } + // 對齊4byte + for(size_t i = 0; i < alig; ++i) { + fwrite("", sizeof(char), sizeof(uch), pFile); + } + } + fclose(pFile); +} +void bmpRead(const char* name, uch** raw_img, + uint32_t* width, uint32_t* height, uint16_t* bits) +{ + if(!(name && raw_img && width && height && bits)) { + perror("Error bmpRead."); + return; + } + // 檔案資訊 + struct BmpFileHeader file_h; + // 圖片資訊 + struct BmpInfoHeader info_h; + // 讀取檔頭 + FILE *pFile = NULL; + // pFile = fopen(name, "rb+"); + fopen_s(&pFile, name, "rb+"); + if(!pFile) { + perror("Error opening file."); + return; + } + fread((char*)&file_h, sizeof(char), sizeof(file_h), pFile); + fread((char*)&info_h, sizeof(char), sizeof(info_h), pFile); + // 讀取長寬 + *width = info_h.biWidth; + *height = info_h.biHeight; + *bits = info_h.biBitCount; + size_t ImgSize = ((size_t)*width) * ((size_t)*height) * 3; + *raw_img = (uch*)calloc(ImgSize, sizeof(uch)); + // 讀取讀片資訊轉RAW檔資訊 + fseek(pFile, file_h.bfOffBits, SEEK_SET); + size_t alig = ((info_h.biWidth*info_h.biBitCount/8)*3) % 4; + for(int j = *height-1; j >= 0; --j) { + for(unsigned i = 0; i < *width; ++i) { + uint32_t idx = j*(*width)+i; + if(*bits == 24) { // RGB圖片 + fread((char*)&(*raw_img)[idx*3 +2], + sizeof(char), sizeof(uch), pFile); + fread((char*)&(*raw_img)[idx*3 +1], + sizeof(char), sizeof(uch), pFile); + fread((char*)&(*raw_img)[idx*3 +0], + sizeof(char), sizeof(uch), pFile); + } else if(*bits == 8) { // 灰階圖 + fread((char*)&(*raw_img)[idx], + sizeof(char), sizeof(uch), pFile); + } + } + fseek(pFile , (long)alig , SEEK_CUR); + } + fclose(pFile); +} + +// 圖像結構 +typedef struct Imgraw { + uint32_t width, height; + uint16_t bits; + uch* data; +} Imgraw; +void Imgraw_Read(const Imgraw* _this, const char* name) { + const Imgraw* p = _this; + bmpRead(name, &p->data, &p->width, &p->height, &p->bits); +} +void Imgraw_Writ(const Imgraw* _this, const char* name) { + const Imgraw* p = _this; + bmpWrite(name, p->data, p->width, p->height, p->bits); +} +/*==============================================================*/ +int main(int argc, char const *argv[]) { + // 建構 + Imgraw img = {0, 0, 0, NULL}; + // 讀圖 + Imgraw_Read(&img, "./input/bw2x1.bmp"); + // 寫圖 + Imgraw_Writ(&img, "./output/bw2x1(output).bmp"); + return 0; +} +/*==============================================================*/ \ No newline at end of file diff --git a/bmp_copy_demo.exe b/bmp_copy_demo.exe new file mode 100644 index 0000000000000000000000000000000000000000..82909f2446cc477282f27bbe3892a5375713d628 GIT binary patch literal 44289 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 literal 0 HcmV?d00001