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

如何把Image控制項中點陣圖的所有的黑色換成紅色?

答題得分者是:RedSnow
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-23 19:41:24 IP:222.135.xxx.xxx 未訂閱
大蝦們,如何把Image控制項中點陣圖的所有的黑色換成紅色?
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-23 20:18:09 IP:221.169.xxx.xxx 未訂閱
一一跑過所有的點,檢查是不是黑色,是黑色就換成紅色 這樣的流程哪個步驟有問題? 檢查pixel的方法,用關鍵字 ScanLine 搜尋一下本站就有了 黑色的代碼是clBlack 紅色是clRed
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-23 20:35:27 IP:222.135.xxx.xxx 未訂閱
大蝦,我沒有描述清楚我的問題,我的需求是這樣的,我有一個程式,要接收剪貼板的圖像,圖像的背景色是黑色的,我現在要把背景色變成白色的,已經可以了,但是圖像裏有一些白色的線,如果直接把背景轉成白色,白色線就沒有了,有沒有一個直接的辦法把黑色和白色互換一下?因為這樣可以不影響整個的圖形,如果檢查所有的點會不會慢? 發表人 - jean2004 於 2005/07/23 20:38:07
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-24 15:51:55 IP:59.115.xxx.xxx 未訂閱
jean2004 您好:    您的描述似乎仍存在著盲點,黑白兩色直接對調後,不是一樣的存在白線會消失的現象嗎? 不知道您要處理的圖像是否有規律性?如果有的話,不妨貼一張您想處理的圖片上來,並標示出相關註解,這樣子或許有經驗的網友們比較能針對您的問題提出較為具體一點的解決方案。 7 天天敲鍵盤 v 時時按滑鼠 8
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-25 07:47:20 IP:222.135.xxx.xxx 未訂閱
大蝦們,我想要的效果就是這樣的:
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-25 07:48:11 IP:222.135.xxx.xxx 未訂閱
有沒有直接的辦法?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-25 14:15:43 IP:59.115.xxx.xxx 未訂閱
jean2004 您好:    最直接的辦法好像也就是掃描圖片了,下列的方式應該能滿足您的需求:
const COLOR1_R = 0;  // 要代換的第一個顏色 Red 值
const COLOR1_G = 0;  // 要代換的第一個顏色 Green 值
const COLOR1_B = 0;  // 要代換的第一個顏色 Blue 值    const COLOR2_R = 255;  // 要代換的第二個顏色 Red 值
const COLOR2_G = 255;  // 要代換的第二個顏色 Green 值
const COLOR2_B = 255;  // 要代換的第二個顏色 Blue 值    const DOT_COLOR1 = COLOR1_R   COLOR1_G   COLOR1_B;  // 要代換的第一個顏色
const DOT_COLOR2 = COLOR2_R   COLOR2_G   COLOR2_B;  // 要代換的第二個顏色    Graphics::TBitmap *Bitmap = new Graphics::TBitmap();
Bitmap->Width  = Image1->Picture->Bitmap->Width;
Bitmap->Height = Image1->Picture->Bitmap->Height;
Bitmap->Canvas->Draw(0, 0, Image1->Picture->Bitmap);
Bitmap->PixelFormat = pf24bit;    RGBTRIPLE* pRow;
WORD dot;
const BLACKDOT = 0;
const WHITEDOT = 255*3;    for (int y = 0; y < Bitmap->Height;   y) {
    pRow = static_cast(Bitmap->ScanLine[y]);
    for (int x = 0; x < Bitmap->Width;   x){
        dot = pRow[x].rgbtRed   pRow[x].rgbtGreen   pRow[x].rgbtBlue;
        if (dot == DOT_COLOR1) {
            pRow[x].rgbtRed      = COLOR2_R;
            pRow[x].rgbtGreen    = COLOR2_G;
            pRow[x].rgbtBlue     = COLOR2_B;
        } else if (dot == DOT_COLOR2) {
            pRow[x].rgbtRed      = COLOR1_R;
            pRow[x].rgbtGreen    = COLOR1_G;
            pRow[x].rgbtBlue     = COLOR1_B;
        }
    }
}    Image1->Picture->Bitmap->Assign(Bitmap);
Image1->Picture->Bitmap->PixelFormat = pf24bit;    delete Bitmap;
Bitmap = NULL;
我將處理程序寫成較為靈活的方式,如果您不是要處理黑白兩色的互換,那麼僅需修改那八個 const 的前六個設定值即可,試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-26 09:33:08 IP:222.135.xxx.xxx 未訂閱
哦,這樣速度竟然還滿快的,RedSnow大蝦真是高手呀,謝謝!!!
系統時間:2024-05-10 22:14:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!