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

能否用Canvas.LineTo畫空心的線段

答題得分者是:sryang
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-09-20 10:01:17 IP:60.248.xxx.xxx 未訂閱
請問各位先進,
小弟有需求用Canvas.LineTo()畫一條空心的線,
也就是只有邊框的線段。
因為是任意角度的線段,所以不適合用Canvas.Rectangle()或是Canvas.RoundRect()畫,
且兩頭要需要是圓形,所以也不適合用Canvas.Polygon()畫。
有試過使用
BeginPath(Bitmap.Canvas.Handle);
Bitmap.Canvas.Pen.Width:=5;
Bitmap.Canvas.MoveTo(10, 110);
Bitmap.Canvas.LineTo(280,110);
EndPath(Bitmap.Canvas.Handle);
StrokePath(Bitmap.Canvas.Handle);
但是似乎只支援Canvas.TextOut或是Canvas.Rectangle等形狀,
還請各位先進提供一下意見或是其他的方式,
使用的語言為Delphi或BCB
謝謝感恩。

sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2017-09-20 18:08:43 IP:59.127.xxx.xxx 未訂閱
上下左右平移 1px 各畫一次,然後原位用 Canvas.Pen.Mode := pmNotXor 再畫一次
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2017-09-21 08:46:44 IP:60.248.xxx.xxx 未訂閱
感謝sryang大提供的意見和思考的方向。
其實類似的方法我也有想過,
就是先用pmNotXor畫一條線,
然後直徑減少2的pixel之後,
再以pmNotXor 畫一次,
這樣應該就會出現以1個pixel環繞的中空線段 (應該是吧),
但是這樣等於每次都要畫2次,
然後在消除這條線的時候又要再畫2次。
但是因為我是用在OnMouseMove()中,
需要跟著耍移動時快速的不停的重畫。
因為有做圖像放大的功能,
小大偷懶是以直接把Image的長寬直接放大來實現。
如果Image的尺寸很大的時候,
就會產生LAG的現象,
所以才想尋求更快速的方法,
看看能否畫一次就完成,
這樣一畫一消除就只要畫2次就完成了。
編輯記錄
Nelson Lo 重新編輯於 2017-09-21 09:13:30, 註解 無‧
系統時間:2024-11-21 20:09:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!