線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2134
推到 Plurk!
推到 Facebook!

一個繪圖處理問題

 
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-24 02:23:55 IP:210.85.xxx.xxx 未訂閱
如果我有一個圖, 用TBitmap load進來後 而且我確定那個圖總共只有兩種顏色(比如是黃色和綠色) 那我怎麼把綠色換成另一個顏色, 比如說藍色... 當然, 最簡單就是用GetPixel和SetPixel來作, 但速度上慘不忍賭 請高手教我, 怎麼用Draw和Brush之類的指令可以把所有的綠色換成藍色呢? 謝謝
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-24 10:03:47 IP:61.231.xxx.xxx 未訂閱
引言: 如果我有一個圖, 用TBitmap load進來後 而且我確定那個圖總共只有兩種顏色(比如是黃色和綠色) 那我怎麼把綠色換成另一個顏色, 比如說藍色... 當然, 最簡單就是用GetPixel和SetPixel來作, 但速度上慘不忍賭 請高手教我, 怎麼用Draw和Brush之類的指令可以把所有的綠色換成藍色呢? 謝謝
如果要快,最快的方式是改變調色盤,這應該是最快的方式,但設定/修改調色盤... 好像很複雜,我還不太會... 另一個方法是使用 TCanvas::FloodFill(int X, int Y, TColor Color, TFillStyle FillStyle); Fills an area of the canvas using the current brush. Use FloodFill to fill a possibly non-rectangular region of the image with the value of Brush. The boundaries of the region to be filled are determined by moving outward from the point (X,Y) until a color boundary involving the Color parameter is encountered. 參考一下它的說明及範例吧。
------
http://www.ViewMove.com
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-24 10:42:39 IP:211.23.xxx.xxx 未訂閱
這個玩過, 但可能我對它的用法還不是很熟....而且有兩個參數, 還要搭Brush指令........一時還try不出來.... 可以提供一下code嗎? thanks.
小貓
一般會員


發表:14
回覆:23
積分:12
註冊:2002-07-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-18 11:21:04 IP:211.74.xxx.xxx 未訂閱
引言: 如果我有一個圖, 用TBitmap load進來後 而且我確定那個圖總共只有兩種顏色(比如是黃色和綠色) 那我怎麼把綠色換成另一個顏色, 比如說藍色... 當然, 最簡單就是用GetPixel和SetPixel來作, 但速度上慘不忍賭 請高手教我, 怎麼用Draw和Brush之類的指令可以把所有的綠色換成藍色呢? 謝謝
以我的做法,我會捨棄TBitmap元件,自己做Load Bitmap的動作並直接對Memory做存取.
小貓
一般會員


發表:14
回覆:23
積分:12
註冊:2002-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-07-18 11:26:16 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 如果我有一個圖, 用TBitmap load進來後 而且我確定那個圖總共只有兩種顏色(比如是黃色和綠色) 那我怎麼把綠色換成另一個顏色, 比如說藍色... 當然, 最簡單就是用GetPixel和SetPixel來作, 但速度上慘不忍賭 請高手教我, 怎麼用Draw和Brush之類的指令可以把所有的綠色換成藍色呢? 謝謝
以我的做法,我會捨棄TBitmap元件,自己做Load Bitmap的動作並直接對Memory做存取.
剛剛又想到一種方法,先用TBitmap::LoadFromFile將影像載入,再使用TBitmap::SaveToStream將之存入TMemorystream元件中,再直接對 TMemorystream::Memory做存取(不過我不確定SaveToStream是否只是寫入影像資料,不然還是要去略過FileHeader的部分)
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-18 11:34:48 IP:211.23.xxx.xxx 未訂閱
跟我後來實作出來的方法一樣 ^^ TMemoryStream真的粉好用
jimmychn
一般會員


發表:3
回覆:21
積分:19
註冊:2002-09-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-10 01:10:29 IP:61.230.xxx.xxx 未訂閱
引言: 跟我後來實作出來的方法一樣 ^^ TMemoryStream真的粉好用
好像用 ScanLine[] 會更好用ㄅ,但要先知道bitPixel!
------
>>>好心有好報
akway
一般會員


發表:1
回覆:11
積分:2
註冊:2006-08-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-09-28 10:22:48 IP:61.223.xxx.xxx 未訂閱
bitmap 對 stream 的存取該怎麼使用?
看了bcb的help file 只有下列說明,根本不知道怎麼使用
請您指點

TBitmap::SaveToStream

Saves the bitmap to a stream.

virtual void __fastcall SaveToStream(Classes::TStream* Stream);

Description

Use SaveToStream to write the bitmap image to the stream specified by the Stream parameter. For example, specify a TBlobStream object as the Stream parameter to save the bitmap image to a graphic field in a dataset.
===================引 用 文 章===================
引言:
引言:
如果我有一個圖, 用TBitmap load進來後 而且我確定那個圖總共只有兩種顏色(比如是黃色和綠色) 那我怎麼把綠色換成另一個顏色, 比如說藍色... 當然, 最簡單就是用GetPixel和SetPixel來作, 但速度上慘不忍賭 請高手教我, 怎麼用Draw和Brush之類的指令可以把所有的綠色換成藍色呢? 謝謝
以我的做法,我會捨棄TBitmap元件,自己做Load Bitmap的動作並直接對Memory做存取.
剛剛又想到一種方法,先用TBitmap::LoadFromFile將影像載入,再使用TBitmap::SaveToStream將之存入TMemorystream元件中,再直接對 TMemorystream::Memory做存取(不過我不確定SaveToStream是否只是寫入影像資料,不然還是要去略過FileHeader的部分)
系統時間:2024-05-05 0:04:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!