用C++語言寫bmp檔案的程式完整版
#include <stdio.h> #include <stdlib.h> /* 定義WORD為兩個位元組的型別 */ typedef unsigned short WORD; /* 定義DWORD為四個位元組的型別 */ typedef unsigned long DWORD; /* 點陣圖檔案頭主要是對點陣圖檔案的一些描述 點陣圖資訊頭主要是對點陣圖影象方面資訊的描述 */ /*************************** 點陣圖標準資訊(54位元組) ******************************************/ /* 點陣圖檔案頭 (點陣圖頭的位元組數 = 點陣圖檔案位元組數 - 點陣圖影象資料位元組數)*/ /* MBP影象資料 (影象資料位元組數 = 影象寬度*影象高度*(每個畫素的位數/8))*/ typedef struct BMP_FILE_HEADER { WORD bType; // 檔案識別符號 DWORD bSize; // 檔案的大小 WORD bReserved1; // 保留值,必須設定為0 WORD bReserved2; // 保留值,必須設定為0 DWORD bOffset; // 檔案頭的最後到影象資料位開始的偏移量 } BMPFILEHEADER; // 14 位元組 /* 點陣圖資訊頭 */ typedef struct BMP_INFO { DWORD bInfoSize; // 資訊頭的大小 DWORD bWidth; // 影象的寬度 DWORD bHeight; // 影象的高度 WORD bPlanes; // 影象的位面數 WORD bBitCount; // 每個畫素的位數 DWORD bCompression; // 壓縮型別 DWORD bmpImageSize; // 影象的大小,以位元組為單位 DWORD bXPelsPerMeter; // 水平解析度 DWORD bYPelsPerMeter; // 垂直解析度 DWORD bClrUsed; // 使用的色彩數 DWORD bClrImportant; // 重要的顏色數 } BMPINF; // 40 位元組 /* 彩色表:調色盤 */ typedef struct RGB_QUAD { char rgbBlue; // 藍色強度 char rgbGreen; // 綠色強度 char rgbRed; // 紅色強度 } RGBQUAD; int main() { int count = sizeof(BMPFILEHEADER); FILE *fp; // 定義一個檔案指標 BMPFILEHEADER bmpFileHeader; // 定義一個 BMP 檔案頭的結構體 BMPINF bmpInfo; // 定義一個 BMP 檔案資訊結構體 // "wb" 以二進位制形式寫入檔案,只允許讀資料。'b'指的是讓這個庫函式以二進位制形式開啟此檔案。 // 讀取失敗會返回空指標,讀取成功後,fp 會指向一塊具有 bmp 屬性的記憶體,我們可以對這塊記憶體開始操作 // 沒有的話自動建立該檔案 if((fp = fopen("kilyc.bmp", "wb")) == NULL) { printf("Cann't open the file!\n"); return 0; } bmpInfo.bInfoSize = 40; bmpInfo.bHeight = 300; bmpInfo.bWidth = 300; bmpInfo.bBitCount = 24; bmpInfo.bmpImageSize = bmpInfo.bHeight*bmpInfo.bWidth*bmpInfo.bBitCount/8; bmpInfo.bCompression = 0; bmpInfo.bClrImportant = 0; bmpInfo.bClrUsed = 0; bmpInfo.bXPelsPerMeter = 0; bmpInfo.bYPelsPerMeter = 0; bmpInfo.bPlanes = 1; // 調色盤數量 bmpFileHeader.bType = 0x4D42; bmpFileHeader.bOffset = 54; bmpFileHeader.bSize = bmpInfo.bmpImageSize + bmpFileHeader.bOffset; bmpFileHeader.bReserved1 = 0; bmpFileHeader.bReserved2 = 0; RGBQUAD image[300][300]; for(int i=0; i<bmpInfo.bWidth; i++) for(int j=0; j<bmpInfo.bHeight; j++) { image[i][j].rgbBlue = 0; image[i][j].rgbGreen = 0; image[i][j].rgbRed = 255; } // 讓 fp 指向 bmp 檔案的開始 // 第 2 個引數是偏移量 第三個引數是檔案起始地址 所以此函式執行成功後文件指標會指向檔案的開始 fseek(fp, 0, SEEK_SET); // fp = 0x00426aa0 // 寫入檔案 fwrite(&bmpFileHeader, sizeof(bmpFileHeader), 1, fp); fwrite(&bmpInfo, sizeof(bmpInfo), 1, fp); fwrite(image, sizeof(RGBQUAD), bmpInfo.bHeight*bmpInfo.bWidth, fp); // 看是否是 1 個位元組對齊 printf("sizeof(bmpFileHeader) = %d\n", sizeof(bmpFileHeader)); printf("sizeof(bmpInfo) = %d\n", sizeof(bmpInfo)); printf("sizeof(RGBQUAD)*bmpInfo.bHeight*bmpInfo.bWidth = %d\n\n", sizeof(RGBQUAD)*bmpInfo.bHeight*bmpInfo.bWidth); // 輸出BMP檔案的點陣圖檔案頭的所有資訊 printf("點陣圖檔案頭主要是對點陣圖檔案的一些描述:BMPFileHeader\n\n"); printf("檔案識別符號 = 0X%X\n", bmpFileHeader.bType); printf("BMP 檔案大小 = %d 位元組\n", bmpFileHeader.bSize); printf("保留值1 = %d \n", bmpFileHeader.bReserved1); printf("保留值2 = %d \n", bmpFileHeader.bReserved2); printf("檔案頭的最後到影象資料位開始的偏移量 = %d 位元組\n", bmpFileHeader.bOffset); // 輸出BMP檔案的點陣圖資訊頭的所有資訊 printf("\n\n點陣圖資訊頭主要是對點陣圖影象方面資訊的描述:BMPInfo\n\n"); printf("資訊頭的大小 = %d 位元組\n", bmpInfo.bInfoSize); printf("點陣圖的高度 = %d \n", bmpInfo.bHeight); printf("點陣圖的寬度 = %d \n", bmpInfo.bWidth); printf("影象的位面數(位面數是調色盤的數量,預設為1個調色盤) = %d \n", bmpInfo.bPlanes); printf("每個畫素的位數 = %d 位\n", bmpInfo.bBitCount); printf("壓縮型別 = %d \n", bmpInfo.bCompression); printf("影象的大小 = %d 位元組\n", bmpInfo.bmpImageSize); printf("水平解析度 = %d \n", bmpInfo.bXPelsPerMeter); printf("垂直解析度 = %d \n", bmpInfo.bYPelsPerMeter); printf("使用的色彩數 = %d \n", bmpInfo.bClrUsed); printf("重要的色彩數 = %d \n", bmpInfo.bClrImportant); printf("\n\n\n壓縮說明:有0(不壓縮),1(RLE 8,8位RLE壓縮),2(RLE 4,4位RLE壓縮,3(Bitfields,位域存放)"); fclose(fp); while(1); return 0; }
相關推薦
用C++語言寫bmp檔案的程式完整版
#include <stdio.h> #include <stdlib.h> /* 定義WORD為兩個位元組的型別 */ typedef unsigned short WORD; /* 定義DWORD為四個位元組的型別 */ typedef uns
用C語言寫一個掃雷程式
執行環境:win10 vs2013 本程式所有設計思路均已註釋行為標記在程式中,為了方便起見,將不在部落格中進行書寫,想要學的朋友複製下面的原始碼可進行學習,也可將程式進行修改獲取不同的遊戲體驗 程式原始截圖 執行結果:
lighttpd + CGI,用c語言寫cgi程式
相信大家都想過用瀏覽器來執行c語言程式,比如點電路板上的燈、其他控制功能等。這裡我就說一說心得。 要使用瀏覽器就必須有伺服器,我這裡用了lighttpd。因為我看其他的都停止開發了,沒法用。 配置和測試可以參考這篇文章: http://blog.chinaunix.net/u
用C語言寫一個好玩的寶石一樣的圖像
循環圖像圖形#include<stdio.h>main(){int n;scanf("%d",&n); for(int i=0;i<n;i++) { for(int j=0;j<n-i-1;j++) { printf(" ")
怎麽用C語言寫一個飛機程序
sge 怎麽 das mob gpl hdd ref dhx cte 5zeffurgal誥退俁稼犢爍厝擋傅鼓《http://weibo.com/p/230927987816857564094464》 wv8kbiqhdd壁溉斡吠戎琴痛鋼匙谷《http://weibo.c
自己用C語言寫RL78 serial bootloader
瞭解更多關於bootloader 的C語言實現,請加我QQ: 1273623966 (驗證資訊請填 bootloader),歡迎諮詢或定製bootloader(線上升級程式)。 之前用C實現過多款PIC微控制器的bootloader, 包括8-bit的PIC16,PIC18;16-bit的P
懶癌晚期學圖論的時候自己用C語言寫了個求可達性矩陣的演算法~
可達性矩陣演算法~ 直接上程式碼 #include <iostream> #include <cstring> using namespace std; #define n 5 void print(int a[n][n]); void print1(int a[n][n]); v
用C語言寫一個簡單的三子棋,實現玩家與電腦的對戰
原始碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 寫一個三子棋 */ //邏輯: //1. 畫
用C語言寫一個簡單的掃雷小遊戲
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 語言寫一個簡單的掃雷遊戲 */ // 1.寫一個遊戲選單 M
用C語言寫PL0編譯器
#include<stdio.h> /*#include"pl0.h"*/ #include"string.h" #include <windows.h> /*PL/0編譯系統C版本標頭檔案pl0.h*/ /*typedef enum{false,t
用C語言寫的一個順序表實現圖書館書籍管理
Function: 增add_book() 刪delete_book() 改modify_book() 查check_book() 實現吧! **************************/ #include<stdio.h>//裡
C語言讀取BMP檔案(同時支援Linux和Windows)
C語言讀取BMP檔案最關鍵的是要理解結構體對齊。一般情況下,C語言的結構體在記憶體中會按照4位元組(32位)或者8位元組(64位)對齊。BMP檔案的資料頭結構體按照位元組排列,而且不能對齊,所以需要用預編譯巨集設定不能對齊。 另外注意Linux下一般用UTF-8編碼,但是Windows下用GB2
用C語言寫一個數組,實現類似JAVA語言中ArrayList的功能
此程式是在看過郝斌老師的資料結構與演算法的視訊後,自己用C語言實現的。整個程式比較簡單,適合入門資料結構時練手。 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #
高階語言是高階程式設計師用低階語言寫給初級程式設計師的工具?
讀《開源時代》創刊詞----- 《開源時代》今天創刊,這是 ChinaUnix 社群為廣大會員提供的一個新的服務。以時代命名,又承載著一種期許,一種為這個時代這個社會以盡微薄之力的期許。“開源”現在已經成了熱門詞彙了,然而在談論中國開源現狀的時候,幾乎所有人都帶著一種近乎悲涼
基於Huffman編碼的C語言解壓縮檔案程式
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> //極大值用於生成Huffman樹 #define MA
用C++語言寫遊戲——打飛機
想玩遊戲嗎? 就到某位神犇這來吧! 這會告訴你很多遊戲寫法! 今天,神犇就開始書寫第三期——打飛機!!! 很容易,只需要用腦袋想想即可,READY——GO! 我也希望大家多多捧場哦~~~ #include<iostream> #include<
用C++語言寫遊戲——打怪小遊戲
想玩遊戲嗎? 就到某位神犇這來吧! 這會告訴你很多遊戲寫法! 今天,神犇就開始書寫第二期——打怪小遊戲!!! 很容易,只需要用腦袋想想即可,READY——GO! 我也希望大家多多捧場哦~~~ 有一點點BUG,敬請諒解! #include <iostre
C函式指標妙用,用c語言寫一個簡易類
其實在C++中的物件也並不是實現起來也並不是多麼的什麼神祕,只是編譯器幫我們做了許多工作,所以我們總覺得C++要比c語言難一些,C++編譯器其實對於類中的非Virtual 函式的的呼叫規則與對C編譯器對函式的呼叫時一樣的,那就是通過call 函式地址的方法。等有
基於C語言的BMP檔案格式轉換
//將bmp圖片檔案保存於1.bmp中,若圖片是bmp檔案,則在out.bmp檔案中可以看到,若不是,則在out.bmp中顯示開啟失敗。//識別乒乓球#include<stdio.h>#include<stdlib.h>//此bmp檔案影象深度要求24
用C語言寫的一個最短作業優先排程演算法
#include <stdio.h> //定義一個結構體 struct sjf{ char name[10]; //程序名 float arrivetime; //到達時間 float servicetime;//服務時間 float starttime; //開