| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3333 人关注过本帖
标题:请教如何填充颜色?
只看楼主 加入收藏
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
结帖率:96%
收藏
已结贴  问题点数:20 回复次数:21 
请教如何填充颜色?
用line围成的三角形,怎么填充颜色??
搜索更多相关主题的帖子: 三角形 如何 
2015-01-25 16:02
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
可以采用API函数
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
第一个参数是绘图场景句柄;
第二\三个参数是开始填充的一点坐标;
第四个参数是边界颜色.如果用黑色画的线就用黑色为边界颜色
第五个参数是填充类型.
详尽说明搜百度

大开眼界
2015-01-26 09:35
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
收藏
得分:0 
找不到方法啊,
2015-01-26 20:49
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
如果不嫌速度慢的话,也可以自己写代码完成,下面代码提供一个着色小面积图案的方法:新建一工程,复制下述代码,运行后在窗口上点击鼠标左键可看到着色效果,点击圆外面会着色不完整。

程序代码:
Private Sub FillPic(obj As Object, X As Single, Y As Single, c As Long, Fc As Long)
  '填充图形,这是一个函数嵌套调用,可填充小面积图形,大面积要多用一个数组再嵌套
  On Error Resume Next
  Dim i As Integer, x1 As Single, y1 As Single, d(3, 1) As Integer
  For i = 0 To 3: d(i, 0) = 0: d(i, 1) = 0: Next
  d(0, 0) = -1: d(1, 0) = 1: d(2, 1) = -1: d(3, 1) = 1  '设置步进方向
  If obj.Point(X, Y) = c Then
    obj.PSet (X, Y), Fc
    For i = 0 To 3
      x1 = X + d(i, 0)
      y1 = Y + d(i, 1)
      FillPic obj, x1, y1, c, Fc
    Next
  End If
End Sub

Private Sub Form_Load()
  Me.ScaleMode = 3
  Me.AutoRedraw = True
  Me.Circle (35, 35), 30, vbBlack
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim c As Long
  If Button = 1 Then
    c = Me.Point(X, Y)
    FillPic Me, X, Y, c, vbBlue
  End If
End Sub
2015-01-26 22:03
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
收藏
得分:0 
我想学API的方法。
Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
怎么用??
2015-01-27 14:35
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:10 
试试
程序代码:
Option Explicit
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long

Private Sub Form_Load()
Form1.ScaleMode = 3
Picture1.ScaleMode = 3
Picture1.AutoRedraw = True
Picture1.ForeColor = vbRed
Picture1.FillColor = vbBlue
Picture1.FillStyle = 0

Picture1.Line (Picture1.Width / 2, 0)-(0, Picture1.Height)
Picture1.Line -(Picture1.Width, Picture1.Height)
Picture1.Line -(Picture1.Width / 2, 0)


Call ExtFloodFill(Picture1.hdc, Picture1.Width / 2, Picture1.Height / 2, vbRed, 0)
End Sub


大开眼界
2015-01-27 15:05
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
收藏
得分:0 
Form1.Line (Form1.Width / 2, 0)-(0, Form1.Height)
Form1.Line -(Form1.Width, Form1.Height)
Form1.Line -(Form1.Width / 2, 0)
这个怎么弄??
2015-01-27 15:51
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
这是逐点画直线。如果要封闭,最后一点和第一点要相连,即
form1.line -(form1.width/2,0)中的(form1.width/2,0)这点也出现在第一行代码中。
实际测试,最直接。

大开眼界
2015-01-27 16:00
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:10 
拓展lianyicq版主的功能,填充选中的颜色
程序代码:
Option Explicit
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Picture1.ScaleMode = 3
  Picture1.AutoRedraw = True
  Picture1.Circle (Picture1.Width * 0.5, Picture1.Height * 0.5), Picture1.Height * 0.4, vbRed
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim c As Long, r As Long, g As Long, b As Long, s As Integer
  Randomize
  r = Rnd * 255: g = Rnd * 255: b = Rnd * 255
  If Button = 1 Then
    c = Picture1.Point(X, Y)  '获取要取代的颜色
    Picture1.FillColor = RGB(r, g, b)
    s = Picture1.FillStyle
    Picture1.FillStyle = 0  '填充模式
    ExtFloodFill Picture1.hdc, X, Y, c, 1  '从鼠标选中的点开始填充随机色(用模式1,模式0是判断边界颜色)
    Picture1.FillStyle = s  '还原填充模式
  End If
End Sub
2015-01-27 17:28
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
收藏
得分:0 
以下是引用lianyicq在2015-1-27 16:00:31的发言:

这是逐点画直线。如果要封闭,最后一点和第一点要相连,即
form1.line -(form1.width/2,0)中的(form1.width/2,0)这点也出现在第一行代码中。
实际测试,最直接。

太好了,又学会了多边形画法。

我是说下面这个多边形如何填色?窗体上的三角形
Form1.Line (Form1.Width / 2, 0)-(0, Form1.Height)
Form1.Line -(Form1.Width, Form1.Height)
Form1.Line -(Form1.Width / 2, 0)
我不会嘛,多点例子才能学会。

[ 本帖最后由 txxb 于 2015-1-27 20:29 编辑 ]
2015-01-27 20:15
快速回复:请教如何填充颜色?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.131952 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved