整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Codeblocks下Freeimage編程(1)—

          Codeblocks下Freeimage編程(1)—圖片讀取

          reeImage是個免費的開源圖片開發庫,用他可以讀取JPG、BMP、PNG、TGA、GIF等20多種常用圖片格式。他還有一個好處,跨平臺。

          FreeImage官網:http://freeimage.sourceforge.net/

          FreeImage下載地址:http://sourceforge.net/projects/freeimage/

          安裝:

          目前最新版本是3.15,下載后得到一個zip。解壓后就可以使用(不要下載源碼,codeblocks編譯特麻煩)。解壓后出現Freeimage目錄,目錄里有個DIST目錄,里面就有我們編程需要的文件(包括頭文件,庫文件)。

          在寫程序時記得把這個目錄和目錄里面的庫、頭文件都加進去。

          一個讀取圖片的程序:

          讀取圖片方法大同小異,按照以下步驟完成,初始化->獲取圖片格式->打開圖片文件->獲取像素值->釋放。程序如下:

          面兩節介紹了如何快速搭建 C 語言開發學習環境,并且給出并解釋了 hello world 的代碼。上一節介紹了C語言的函數,應該注意到,到目前為止,我們使用的函數都是現有的系統函數(例如 printf,sin 等函數)。事實上,實際需求通常是非常復雜的,只依靠現有的函數很難完成。好在我們可以根據需求,自己定義 C 函數。

          可以把一個函數看作是一塊積木,各種各樣的積木才能堆積成復雜的建筑。只有幾種積木,能完成的建筑太有限了,如果能夠自己造各種各樣的積木,再復雜的建筑也能完成。

          通過前面兩節的內容,我們已經了解函數定義的語法了:

          返回值類型 函數名(參數列表)
          {
           語句列表
          }
          

          注意函數名在相應可見域內要保持唯一性,例如,在 main 函數所在文件里定義的函數名不能也為 main。再啰嗦一下 main 函數,主要是因為它是默認的入口函數,比較特殊。

          Old Style C的風格的 main 函數定義寫成 main(){…} 形式,不寫返回值類型也不寫參數列表。Old Style C規定不寫返回值類型就表示返回int型,不寫參數列表就表示參數類型和個數沒有明確指出。這種寬松的規定會導致很多復雜的Bug產生,現在的 C 也保持了這種寫法的兼容,但是鑒于它可能會產生 bug,還是不要這樣寫。

          其實系統在調用 main 函數時是傳參數的,所以 main 函數最標準的形式應該是 int main(int argc, char * argv[]),這種參數傳遞在 linux 下使用起來非常方便,以后用到了再詳細解釋。C標準也規定了 int main(void) 這種形式,如果不使用系統傳進來的兩個參數也可以寫成這種形式。但除了這兩種形式之外,以其它形式定義main函數都是錯誤的或不可移植的。

          自定義函數

          在了解了自定義函數的一些限制后,很容易就可以寫出如下代碼。下面的代碼中,我們定義了 printA 函數,它的參數為空,也沒有返回值,僅僅是打印出一個字母 “A”。

          #include <stdio.h>
          #include <stdlib.h>
          void printA(void)
          {
           printf("A\n");
          }
          int main()
          {
           printA();
           return 0;
          }
          

          我們在 codeblocks 里執行它,發現程序在控制臺中打印出了字母 A。

          關于 codeblocks 的安裝和使用,可參照第一節。

          以后如果想打印 A,只需要執行 printA 函數就可以了。更進一步的,我們自己定義的 printA 函數也可以當做系統函數(例如)一樣嵌套使用,請看如下代碼:

          #include <stdio.h>
          #include <stdlib.h>
          void printA(void)
          {
           printf("A\n");
          }
          void print2A(void)
          {
           printA();
           printA();
          }
          int main()
          {
           print2A();
           printf("----\n");
           print2A();
           return 0;
          }
          

          我們又新定義了一個函數 print2A,它的功能就是在控制臺打印兩個 A。在 codeblocks 里執行,發現與預期一致。


          體會

          從上面的簡單例子中,可以總結出以下信息:

          • 同一個函數可以調用多次。
          • 可以用一個函數去調用另一個函數,第二個函數可以去調用第三個函數。
          • 調用自定義的函數,是通過我們取的名字調用的,例如 main 函數中調用 print2A();
          • 函數可以使代碼更簡潔,原本打印兩個 A 需要兩行代碼,現在只需要 print2A 一行就可以了。
          你可能會說,我定義 print2A 就用了 5 行啊,哪里簡潔了??墒?,以后只要遇到需要打印兩個 A 的地方,我都可以調用 print2A,如果有 10 個地方需要打印兩個 A 呢?另外,如果有一天,我想在打印兩個 A 的時候不換行,那我只需要修改 printA,把里面的 “\n”刪掉就可以了,而不用去找那 10 個需要打印兩個 A 的地方逐個修改。

          讀代碼和讀文章不一樣,按從上到下從左到右的順序讀代碼未必是最好的。比如上面的例子,按順序應該是先看 printA 再看 print2A 再看 main。不過,如果換一個角度,按代碼的執行順序來讀也許會更好:

          因為 main 是入口函數,所以第一句要執行的就是 print2A 函數,那它是什么功能呢?于是目光移到 print2A 函數,它的第一句是 printA 函數,于是進入 printA 函數。奧,知道了 print2A 先要打印一個 A,然后又要執行 printA 函數,又打印了一個 A。這下知道了,main 函數里的第一句要打印兩個 A。

          實際上,在很多大型項目中,要熟悉它的代碼結構,第一件事往往就是找到入口函數。

          歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

          全程默認選項即可,直到......·這里大概有個報錯,將MinGW文件解壓到電腦中。

          ·打開CodeBlocks,選擇菜單:Settings->Compiler..>Toolchain->。

          ·選擇剛解壓文件中的bin文件夾->點擊OK。

          完活兒嘍!


          主站蜘蛛池模板: 大香伊蕉日本一区二区| 中文字幕精品一区二区| 中文字幕av人妻少妇一区二区| 国产一区二区影院| 日韩免费无码视频一区二区三区| 国产婷婷色一区二区三区深爱网 | 亚洲A∨精品一区二区三区下载| 一区二区三区美女视频| 国产福利一区二区| 免费一区二区三区四区五区| 一区二区三区在线观看| 女同一区二区在线观看| 加勒比无码一区二区三区| 午夜视频在线观看一区二区| 亚洲欧美国产国产一区二区三区| 精品黑人一区二区三区| 无码国产精品一区二区免费虚拟VR | 中文字幕一区在线观看视频| 无码人妻品一区二区三区精99| 老熟妇仑乱一区二区视頻| 亚洲一区二区无码偷拍| 国产成人精品一区二区三在线观看 | 免费看AV毛片一区二区三区| 精品无码成人片一区二区| 亚洲国产一区视频| 97av麻豆蜜桃一区二区| 精品一区二区三区在线视频观看| 美女免费视频一区二区| 日韩久久精品一区二区三区| 国产精品99无码一区二区| 精品无人区一区二区三区 | 国产午夜精品免费一区二区三区| 在线观看国产一区二三区| 国产精品一区二区久久精品无码| 无码人妻品一区二区三区精99| 在线免费视频一区二区| 人妻久久久一区二区三区| 精品一区精品二区| 久久蜜桃精品一区二区三区| 无码人妻AⅤ一区二区三区| 内射白浆一区二区在线观看 |