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

BMP 格式的設定

缺席
linly
一般會員


發表:42
回覆:37
積分:15
註冊:2007-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-27 17:17:25 IP:218.168.xxx.xxx 訂閱
您好!! 

小弟目前利用 TMemoryStream 來建構出 BMP 的內容( 檔頭 資料 ),然後再利用 TImage::TPicture::Bitmap::LoadFromStream 呈現在我的 GUI 上,由於我的資料來源是一個 unsigned char array,這個陣列存放的點依序是從 "左上->右下、RGB" 的方式擺放,所以說我就需要做一個重排,改成 "左下->右上 BGR",並放到 TMemoryStream 中,不過這樣在過程中就需要一個個像素的複製,所以想請教有沒有比較有效率的方式。

我在某個網頁講述 BMP format 上有看到可以利用將 Height 改成負的,使得點的擺放方式變成 "上到下",不過她沒說清楚是不是 "左上到右下",以及排列依舊是 BGR 嘛!? 還請指導。感謝!!!
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-02-01 00:38:58 IP:140.113.xxx.xxx 訂閱
不知道你試出來了沒有
[code cpp]
TMemoryStream *ms = new TMemoryStream();
ms->LoadFromFile(.);

BITMAPINFOHEADER *pbih;

pbih = (BITMAPINFOHEADER *)((char *)ms->Memory sizeof(BITMAPFILEHEADER));
pbih->biHeight = -pbih->biHeight;

Image1->Picture->Bitmap->LoadFromStream(ms);

[/code]

RGB跟BGR的排列,以你的直覺,上面這樣會改變嗎?
請動手做
linly
一般會員


發表:42
回覆:37
積分:15
註冊:2007-10-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-02-02 15:00:56 IP:218.168.xxx.xxx 訂閱
圖形上下顛倒了!!!  所以說當高加一個負號,圖片讀取方式會從 "左下->右上" 改變成 "左上->右下",但像素一樣還是 BGR 排列,

依照這種情況看來,我弄出一個 BMP 表頭,將裡頭的高加上一個負號還是不夠,因為我的來源(row data)是 "左上->右下 RGB" 排列

謝謝你!

===================引 用 arisaka_matsuri 文 章===================
不知道你試出來了沒有
[code cpp]
TMemoryStream *ms = new TMemoryStream();
ms->LoadFromFile(.);

BITMAPINFOHEADER *pbih;

pbih = (BITMAPINFOHEADER *)((char *)ms->Memory sizeof(BITMAPFILEHEADER));
pbih->biHeight = -pbih->biHeight;

Image1->Picture->Bitmap->LoadFromStream(ms);

[/code]

RGB跟BGR的排列,以你的直覺,上面這樣會改變嗎?
請動手做
編輯記錄
linly 重新編輯於 2008-02-02 15:31:23, 註解 無‧
系統時間:2024-04-27 5:43:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!