程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> c# BMP圖形文件分析類

c# BMP圖形文件分析類

編輯:關於C#
 

1using System;
2using JJBase.FILE;
3namespace JJBase.Image
4{
5 /// <summary>
6 /// BMP 的摘要說明。
7 /// </summary>
8 public class BMP
9 {
10
11 public BMP()
12 {
13 //
14 //TODO: 在此處添加構造函數邏輯
15 //作者:梁俊傑
16 //時間:2005-9-29
17 //功能:分析bmp文件格式
18 //本文參考了林福宗老師的有關BMP文件格式的文章
19 //參考鏈接:http://www.chinahacker.net/article/showarticle.asp?articleid=20809
20 //參考鏈接:http://www.moon-soft.com/program/FORMAT/graphics/Bmp.html
21 //
22 }
23 /*BMP(BitMap-File)圖形文件是Windows采用的圖形文件格式,在Windows環境
24 * 下運行的所有圖象處理軟件都支持BMP圖象文件格式。Windows系統內部各
25 * 圖像繪制操作都是以BMP為基礎的。Windows 3.0以前的BMP圖文件格式與
26 * 顯示設備有關,因此把這種BMP圖象文件格式稱為設備相關位圖DDB
27 * (device-dependent BitMap)文件格式。Windows 3.0以後的BMP圖象文件與
28 * 顯示設備無關,因此把這種BMP圖象文件格式稱為設備無關位圖DIB
29 * (device-independent BitMap)格式(注:Windows 3.0以後,在系統中仍
30 * 然存在DDB位圖,象BitBlt()這種函數就是基於DDB位圖的,只不過如果你想將
31 * 圖像以BMP格式保存到磁盤文件中時,微軟極力推薦你以DIB格式保存),目的
32 * 是為了讓Windows能夠在任何類型的顯示設備上顯示所存儲的圖象。BMP位圖文件
33 * 默認的文件擴展名是BMP或者bmp(有時它也會以.DIB或.RLE作擴展名)。
34 * */
35 public struct StructBMP
36 {
37 public BMPHeader Header;
38 public BMPPalette Palette;
39 public BMPData Data;
40 }
41 public struct BMPHeader
42 {
43 /*位圖文件可看成由4個部分組成:位圖文件頭(BitMap-file header)、
44 * 位圖信息頭(BitMap-information header)、彩色表(color table)和
45 * 定義位圖的字節陣列,
46 * */
47 public string Identifier;/*2 bytes,識別位圖的類型:
48 ‘BM’ : Windows 3.1x, 95, NT, …
49 ‘BA’ :OS/2 BitMap Array
50 ‘CI’ :OS/2 Color Icon
51 ‘CP’ :OS/2 Color Pointer
52 ‘IC’ : OS/2 Icon
53 ‘PT’ :OS/2 Pointer
54 注:因為OS/2系統並沒有被普及開,所以在編程時,你只需判斷第一個標識“BM”就行。
55 */
56 public System.Int32 FileSize;//1 dword,用字節表示的整個文件的大小
57 public byte[] Reserved;//1 dword,保留,必須設置為0
58 public System.Int32 BitMapDataOffset;//1 dword,從文件開始到位圖數據開始之間的數據(BitMap data)之間的偏移量
59 public System.Int32 BitMapHeaderSize;/*1 dword
60 位圖信息頭(BitMap Info Header)的長度,用來描述位圖的顏色、壓縮方法等。下面的長度表示:
61 28h - windows 3.1x, 95, nt, …
62 0ch - os/2 1.x
63 f0h - os/2 2.x
64 注:在Windows95、98、2000等操作系統中,位圖信息頭的長度並不一定是28h,因為微軟已經制定出了新的BMP文件格式,其中的信息頭結構變化比較大,長度加長。所以最好不要直接使用常數28h,而是應該從具體的文件中讀取這個值。這樣才能確保程序的兼容性。
65 */
66 public System.Int32 Width;//1 dword,位圖的寬度,以象素為單位
67 public System.Int32 Height;//1 dword,位圖的高度,以象素為單位
68 public System.Int16 Planes;//1 word,位圖的位面數(注:該值將總是1)
69 public System.Int16 BitsPerPixel;
70 /*1 word
71 每個象素的位數
72 1 - 單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色)
73 4 - 16 色位圖
74 8 - 256 色位圖
75 16 - 16bit 高彩色位圖
76 24 - 24bit 真彩色位圖
77 32 - 32bit 增強型真彩色位圖
78 */
79 public System.Int32 Compression;
80 /*1 dword
81 壓縮說明:
82 0 - 不壓縮 (使用BI_RGB表示)
83 1 - RLE 8-使用8位RLE壓縮方式(用BI_RLE8表示)
84 2 - RLE 4-使用4位RLE壓縮方式(用BI_RLE4表示)
85 3 - Bitfields-位域存放方式(用BI_BITFIELDS表示)
86 */
87 public System.Int32 BitMapDataSize;//1 dword,用字節數表示的位圖數據的大小。該數必須是4的倍數
88 public System.Int32 HResolution;//1 dword,用象素/米表示的水平分辨率
89 public System.Int32 VResolution;//1 dword,用象素/米表示的垂直分辨率
90 public System.Int32 Colors;//1 dword,位圖使用的顏色數。如8-比特/象素表示為100h或者 256.
91 public System.Int32 ImportantColors;
92 /*1 dword,指定重要的顏色數。當該域的值等於顏色數時(或者等於0時),表示所有顏色都一樣重要
93 */
94 }
95 public struct BMPPalette
96 {
97 public byte[] Palette;//new byte[8192];//bmp規范沒有規定調色板最大81926字節,此處可以根據程序需要調節
98 /*調色板數據根據BMP版本的不同而不同PaletteN * 4 byte調色板規范。
99 對於調色板中的每個表項,這4個字節用下述方法來描述RGB的值: 1字節用於藍色分量
100 1字節用於綠色分量
101 1字節用於紅色分量
102 1字節用於填充符(設置為0)
103 */
104 }
105 public struct BMPData
106 {
107 public byte[] BitMapData;//=new byte[1024000];//bmp規范沒有規定bmp數據最多為1024000,此處可以根據需要調整

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved