全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1293
推到 Plurk!
推到 Facebook!

用TmemorySteam 拿取圖象後. 大小不一樣

尚未結案
tidal
初階會員


發表:93
回覆:32
積分:25
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-26 18:09:06 IP:202.82.xxx.xxx 未訂閱
bmp:=TBitMap.Create; bmp.LoadFromFile('E:\testimage.bmp'); image1.Picture.Bitmap:=bmp; memstream:=TMemoryStream.Create; bmp.SaveToStream(memstream); memstream.Position:=0; showMessage(inttoStr(memstream.Size)); <--2462 我的圖象是160*120 (用的是單色bmp) , 我查過bmp的header是64bytes. 圖象大少應該是2464bytes. 我在dos看也是2464bytes. 在delphi少了2個bytes 這是什麼原因?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-26 22:26:57 IP:61.222.xxx.xxx 未訂閱
我測的結果,不曉得您是用哪一套軟體畫的。 我用 Ulead PhotoImpact 存160*120黑白圖。 檔案大小為2462。 用memstream.Size得出也是 2462。
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-27 08:36:13 IP:219.134.xxx.xxx 未訂閱
你從哪里看到bmp的檔頭部分是64bytes的?bmp的檔頭結構只有62bytes長沒錯,是您看錯了吧,不是delphi吃掉2bytes~    我轉一篇bmp檔頭結構的文章給你看看吧
引言: BMP(BMP檔案格式) BMP 是 Bit Mapped 的縮寫,是 Microsoft 公司為了 Windows 自行發展的一種影像檔格式,因為在 Windows 環境中,畫面的捲動、視窗開啟及恢復,均是在繪圖模式之下運作,因此所選擇的圖形檔格式必須能應付高速度的作業需求,不能有太多的計算過程,因此真實的將螢幕內容一點一點地儲存在檔案內,避免解壓縮時浪費時間,因此有了 BMP 的誕生。 BMP 格式是與裝置無關的,故又稱 DIB (Device-Independent Bitmap)。這種格式的圖形檔可以是 2 色、16 色、256 色或 16777216 色。每個影像檔都有兩部份,第一個部份是記錄影像相關資料的檔頭,第二部份才是影像資料。BMP 的檔頭可分為兩部份,第一部份在 WINDOWS.H 檔案中定義為BITMAPFILEHEADER 結構,其中前面兩個位元組固定為常數 0x4D42 (字串『BM』,表示這是一個 BMP 檔案,接下來的四個位元組為檔案大小,這也是我們在 MS-DOS 的 DIR 指令所看到的檔案大小,接下來的四個位元組保持為 0,第十一位元組開始的四個位元組記錄圖形資料起始位址,單色圖形通常為 0x3E,彩色圖形為 0x76。 第二部份資訊則由 BITMAPINFOHEADER 結構所定義,包括了十一個欄位,第一個欄位為常數 0X28,佔用四個位元組,第二與第三個欄位分別為長整數的圖形寬度與高度 (分別佔用四個位元組,以圖點為單位),第四個欄位為色平面數,通常為 1 (在十六色影像中為四),佔用兩個位元組,第五個欄位為每個圖點的顏色位元數,通常有 1、4、8、16、24、32 等值,為兩個位元組。 第六個至十一欄位都是四個位元組大小,首先為壓縮方式,若未壓縮則其值為 0,第七個欄位為實際圖形檔的位元組大小,第八與第九個欄位為每公尺水平與垂直解析度,第十個欄位為影像所使用的顏色數目,第十一個欄位則是重要的顏色數目。所以整個 BITMAPINFOHEADER 結構共佔用四十個位元組。 我們以下列範例來說明此種檔案的格式,BMP 檔頭如下: 使用上面的欄位說明,我們可看出這個 BMP 格式是以 0x4D42 開頭(以字組儲存的資料,其兩個位元組的順序必須倒過來看) ,檔案大小是0xC2 (= 194) 位元組,圖形資料從檔案 0x3E (= 62) 的位址開始存放,BITMAPINFOHEADER 結構的大小是 0x28 (= 40) 個位元組,此檔案的寬度為0x14 (=20) 個圖點,高度為 0x21 (=33) 個圖點,每個圖點以一個位元表示 (換句話說,這個影像檔為單色的) 且未經壓縮,最後五個欄位皆設為零。 假若 biClrUsed(影像所使用的顏色數目) 欄位設為零,且 biBitCount (每個圖點所佔用的位元數目) 欄位為 1,4 或 8,則在結構BITMAPINFOHEADER 之後跟隨一個調色盤的資料,若每個圖點所佔的位元數是 1,則調色盤會有兩組;若所佔的位元數是 4,則調色盤有十六組;若所佔的位元數是 8,則調色盤有二百五十六組,每組調色盤由四個位元組組成:第一個位元是藍色所佔的強度 (或稱為比率) 、第二個位元是綠色所佔的強度、第三個位元是紅色所佔的強度,第四個位元則保留。根據此規則,若圖形是兩種顏色(biBitCount = 1) ,則調色盤所佔的空間為8 個位元組;若圖形是 16 色(biBitCount = 4),則調色盤佔了 64 位元組;而圖形是 256 色(biBitCount)時,調色盤將佔去1024 位元組,這恰好是 1 KB 的大小。當圖形檔是 16777216 ( 2 的24 次方) 色時,圖形資料本身每個圖點佔 3 個位元組,可視為一調色盤,故不再需任何調色盤的資料。
藏私の禁止
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-27 09:45:53 IP:219.134.xxx.xxx 未訂閱
你從哪里看到bmp的檔頭部分是64bytes的?bmp的檔頭結構只有62bytes長沒錯,是您看錯了吧,不是delphi吃掉2bytes~    我轉一篇bmp檔頭結構的文章給你看看吧
引言: BMP(BMP檔案格式) BMP 是 Bit Mapped 的縮寫,是 Microsoft 公司為了 Windows 自行發展的一種影像檔格式,因為在 Windows 環境中,畫面的捲動、視窗開啟及恢復,均是在繪圖模式之下運作,因此所選擇的圖形檔格式必須能應付高速度的作業需求,不能有太多的計算過程,因此真實的將螢幕內容一點一點地儲存在檔案內,避免解壓縮時浪費時間,因此有了 BMP 的誕生。 BMP 格式是與裝置無關的,故又稱 DIB (Device-Independent Bitmap)。這種格式的圖形檔可以是 2 色、16 色、256 色或 16777216 色。每個影像檔都有兩部份,第一個部份是記錄影像相關資料的檔頭,第二部份才是影像資料。BMP 的檔頭可分為兩部份,第一部份在 WINDOWS.H 檔案中定義為BITMAPFILEHEADER 結構,其中前面兩個位元組固定為常數 0x4D42 (字串『BM』,表示這是一個 BMP 檔案,接下來的四個位元組為檔案大小,這也是我們在 MS-DOS 的 DIR 指令所看到的檔案大小,接下來的四個位元組保持為 0,第十一位元組開始的四個位元組記錄圖形資料起始位址,單色圖形通常為 0x3E,彩色圖形為 0x76。 第二部份資訊則由 BITMAPINFOHEADER 結構所定義,包括了十一個欄位,第一個欄位為常數 0X28,佔用四個位元組,第二與第三個欄位分別為長整數的圖形寬度與高度 (分別佔用四個位元組,以圖點為單位),第四個欄位為色平面數,通常為 1 (在十六色影像中為四),佔用兩個位元組,第五個欄位為每個圖點的顏色位元數,通常有 1、4、8、16、24、32 等值,為兩個位元組。 第六個至十一欄位都是四個位元組大小,首先為壓縮方式,若未壓縮則其值為 0,第七個欄位為實際圖形檔的位元組大小,第八與第九個欄位為每公尺水平與垂直解析度,第十個欄位為影像所使用的顏色數目,第十一個欄位則是重要的顏色數目。所以整個 BITMAPINFOHEADER 結構共佔用四十個位元組。 我們以下列範例來說明此種檔案的格式,BMP 檔頭如下: 使用上面的欄位說明,我們可看出這個 BMP 格式是以 0x4D42 開頭(以字組儲存的資料,其兩個位元組的順序必須倒過來看) ,檔案大小是0xC2 (= 194) 位元組,圖形資料從檔案 0x3E (= 62) 的位址開始存放,BITMAPINFOHEADER 結構的大小是 0x28 (= 40) 個位元組,此檔案的寬度為0x14 (=20) 個圖點,高度為 0x21 (=33) 個圖點,每個圖點以一個位元表示 (換句話說,這個影像檔為單色的) 且未經壓縮,最後五個欄位皆設為零。 假若 biClrUsed(影像所使用的顏色數目) 欄位設為零,且 biBitCount (每個圖點所佔用的位元數目) 欄位為 1,4 或 8,則在結構BITMAPINFOHEADER 之後跟隨一個調色盤的資料,若每個圖點所佔的位元數是 1,則調色盤會有兩組;若所佔的位元數是 4,則調色盤有十六組;若所佔的位元數是 8,則調色盤有二百五十六組,每組調色盤由四個位元組組成:第一個位元是藍色所佔的強度 (或稱為比率) 、第二個位元是綠色所佔的強度、第三個位元是紅色所佔的強度,第四個位元則保留。根據此規則,若圖形是兩種顏色(biBitCount = 1) ,則調色盤所佔的空間為8 個位元組;若圖形是 16 色(biBitCount = 4),則調色盤佔了 64 位元組;而圖形是 256 色(biBitCount)時,調色盤將佔去1024 位元組,這恰好是 1 KB 的大小。當圖形檔是 16777216 ( 2 的24 次方) 色時,圖形資料本身每個圖點佔 3 個位元組,可視為一調色盤,故不再需任何調色盤的資料。
藏私の禁止
系統時間:2024-04-19 17:22:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!