請教圖形的色差與容錯問題 |
尚未結案
|
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
小弟想製作一個以圖形為形狀的 FORM 外觀,但是總是會有白邊,之前有找到
一個有容錯功能的演算法,但是這個容錯度參數似乎沒有什麼用,研究很久了
還是看不出那邊有問題,大大們如果對圖形邊緣搜尋有研究的話可否幫小弟看看呢? 程式網址如下: http://forum.vclxx.org/topic.php?TOPIC_ID=12875&FORUM_ID=12&CAT_ID=3&Topic_Title=ActiveSkin,§ïÅÜForm¥~«¬, º}«G¤¶±...§¹¾ã¸ѵª~&Forum_Title=C++ Ps.程式完全沒有問題只是,容錯度的參數沒有作用(試不出來) 另外小弟也把修改後的程式貼到會員問題檔案區,麻煩大家了! 發表人 - China Join 於 2003/04/23 22:12:22
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
原文真的是很好的分享,我也試作了,沒有問題...
我想,唯一有問題的是它提供的簡易範例: HBITMAP bmp_a =Form1->Image1->Picture->Bitmap->Handle ;
COLORREF colo = clWhite;
COLORREF colo_r= clWhite;
HRGN rgn= GetPictureRegion(bmp_a, colo,colo_r);
SetWindowRgn(this->Handle, rgn, true); 表示透明色是白色,而容許誤差值也是白色!
白色已是由 RGB 都是 255 所組成,已是各色之最大值,由其演算法中,有用到 cTolerance 參數的只有:
BYTE lr = GetRValue(cTransparentColor); BYTE lg = GetGValue(cTransparentColor); BYTE lb = GetBValue(cTransparentColor); BYTE hr = (BYTE)min(0xff, lr GetRValue(cTolerance)); BYTE hg = (BYTE)min(0xff, lg GetGValue(cTolerance)); BYTE hb = (BYTE)min(0xff, lb GetBValue(cTolerance));而輸入的 cTransparentColor 是白色, lr,lg,lb 已都是 255 不論 cTolerance 為何值 hr,hg,hb 都會是 255。 建議您將透明色改成其他的顏色,例如: 0x00FF00FF 這個粉紅色,在許多免費 shell 圖庫中都是以它為透明色,再將 cTolerance 設為 0,我已試過,沒有問題。 也因為它的演算法中有最大 255 的限制了,最好透明色不要用白色! 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
China Join
中階會員 發表:81 回覆:242 積分:89 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |