引用 | 編輯
troy_liaw106
2011-02-08 22:29 |
樓主
▼ |
||
|
引用 | 編輯
ebolaman
2011-02-09 03:43 |
1樓
▲ ▼ |
||||||||||
如果是 中空的 Shape,直接用 VB6 內建的函數 : PSet, Line 即可達成
不知道你的意思是 頂點與線 上色,還是要連點連起來的多邊形內部也要上色 如果 內部需要上色,可以用幾個 API 來達成 網路查了一下才發現有許多種方法可以達成,甚至有人都做好了模組可以直接套用 我以別人的程式碼為基礎,作了一個 "畫出任意 正多邊形" 的專案,可以參考看看 主要是參考 http://tw.knowledge.yahoo.com/question/question?qid=1610020405915 的回答內容 只是座標方面 (P().X = .... P().Y = .....) 要修改一下 這是我做的一個小程式: 主要的程式碼如下: (Sub DrawRegularShape) DrawRegularShape 的參數: 圖片物件, 幾正邊形, 圓形的長度, 初始的角度, 圓形中心的 X, 圓形中心的 Y, 顏色 複製程式 Public Sub DrawRegularShape(ByRef Pic As Object, ByVal EdgesCt As Long, ByVal CircleR As Long, ByVal IntAngle As Double, _ ByVal CenterX As Long, ByVal CenterY As Long, ByVal FilledColor As Long) Dim P(100) As POINTAPI, hBrush As Long, hRgn As Long Dim i As Long Dim tempX As Long, tempY As Long, Angle As Double 'Convert Angle Into 'Rad' IntAngle = IntAngle / 180 * Pi '----------- Specify Points ---------- For i = 0 To EdgesCt - 1 Angle = ((Pi * 2 / EdgesCt) * i) + IntAngle + (Pi / 2) tempX = CenterX + (CircleR * Cos(Angle)) tempY = CenterY - (CircleR * Sin(Angle)) P(i).X = tempX P(i).Y = tempY ' '[Debug - Draw Pien Point] ' Pic.DrawWidth = 3 ' Pic.PSet (tempX, tempY) Next i Do While i <= UBound(P) P(i).X = P(i - 1).X P(i).Y = P(i - 1).Y i = i + 1 Loop '-------------------------------------- hBrush = CreateSolidBrush(FilledColor) hRgn = CreatePolygonRgn(P(0), UBound(P), ALTERNATE) If hRgn Then FillRgn Pic.hdc, hRgn, hBrush DeleteObject hRgn ' '[Debug - Draw Central Point] ' Pic.DrawWidth = 5 ' Pic.PSet (CenterX, CenterY) End Sub 這是座標的解析,如果搞不懂以上程式碼運作原理的話,看這張圖容易了解: 這是 "正" 多邊形 的示範,如果要不規則形 只需將以上的 For ... Next 區塊移除,改成 指定 座標 各是多少,或許用 文字檔來載入 等方式..... 此 VB6 專案 "Draw A Polygon" + 程式 下載:
x1 |
引用 | 編輯
troy_liaw106
2011-02-12 08:31 |
2樓
▲ ▼ |
內部上色的部份,顏色可以調透明度嗎?
x0 |
引用 | 編輯
ebolaman
2011-02-12 16:29 |
3樓
▲ ▼ |
||||||||||
下面是引用 troy_liaw106 於 2011-02-12 08:31 發表的 : 有點不懂 "透明度" 的意思 是指 (1) 圖片交錯,某物件有透明度 與 其他物件重疊,混色,例如: (2) 還是單純一個物件的透明度 ? 第一種我沒去研究,看起來似乎比較困難 第二種我作了,是利用顏色的 HSB (維基百科連結、數位男女連結) 來調色 HSB 其中的 S 為 "濃度" 的意思,我發現這可以來替代 "透明度",如果我沒錯的話 HSB 與 RGB 的轉換公式是參考 http://www.easyrgb.com/index.php?X=MATH 的設計 這次把上次的專案稍加修改,加上能調配 HSV 的功能 (HSV 等同 HSB) 介面部分模擬 軟體:色胚子 (ColorBase) 的設計,有興趣可以去下載研究 但是有個小缺點就是,不是全部的顏色範圍都能調整,可能是 Pixel 單位的緣故吧 看這張圖大概能知道,但是我還是不了解詳細原理: 這次還加上了 "Enable Details" 的勾選,可以直接了解繪圖的原理 (長度部分單位為 Pixel) 專案的程式碼稍顯複雜,如果不知道各方的用途,請告訴我 我會再來解析 VB6 專案+程式 下載 :
x1 |
引用 | 編輯
ebolaman
2011-02-12 16:35 |
4樓
▲ ▼ |
對了,剛才發現 有時候調配 HSV 的那三條 PictureBox 會變成完全白色
可能是 屬性 AutoRedraw 沒設成 True 吧,請改正,我懶得重新上傳 x0 |
引用 | 編輯
troy_liaw106
2011-02-12 18:55 |
5樓
▲ ▼ |
我指的是第一個用alpha調透明度
沒關係,我有想到替代方案了 謝謝 x0 |