在vb.net中绘制与图片重叠的线条
我试图在vb.net中复制此控件,但使用HSL值而不是HSV。 到目前为止,我发现所有的图像框,包括滑块。色轮的图像为180x128(整个颜色范围的一半,即360x255)。图像框的位置定义了选定的颜色范围 移动滑块时,这些线会绘制在图像上,但它们会重叠。它们不在图像本身上。它们随着滑块的位置移动 如何将这些线条叠加到图片上,移动它们的最佳方式是什么?在每个移动的像素处删除并重新绘制线条?不是很慢吗 -----编辑----- 当前代码:在vb.net中绘制与图片重叠的线条,vb.net,image,overlay,paint,Vb.net,Image,Overlay,Paint,我试图在vb.net中复制此控件,但使用HSL值而不是HSV。 到目前为止,我发现所有的图像框,包括滑块。色轮的图像为180x128(整个颜色范围的一半,即360x255)。图像框的位置定义了选定的颜色范围 移动滑块时,这些线会绘制在图像上,但它们会重叠。它们不在图像本身上。它们随着滑块的位置移动 如何将这些线条叠加到图片上,移动它们的最佳方式是什么?在每个移动的像素处删除并重新绘制线条?不是很慢吗 -----编辑----- 当前代码: Private Sub PictureBox1_Pain
Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
Try
Dim gxoff As Graphics
Dim pen As Pen = New Pen(Color.Azure)
gxoff.DrawImage(Me.PictureBox1.Image, New Rectangle(Me.PictureBox1.Left, Me.PictureBox1.Top, Me.PictureBox1.Width, Me.PictureBox1.Height), New Rectangle(0, 0, Me.PictureBox1.Image.Width, Me.PictureBox1.Image.Height), GraphicsUnit.Pixel)
pen.DashStyle = DashStyle.Dash
Dim num1 As Integer = Math.Min(Me.PictureBox1.Width - 1, Math.Max(0, Me.Hmax.Left - Me.PictureBox1.Left + 7)) + Me.PictureBox1.Left
Dim num2 As Integer = Math.Min(Me.PictureBox1.Width - 1, Math.Max(0, Me.Hmin.Left - Me.PictureBox1.Left + 7)) + Me.PictureBox1.Left
Dim num3 As Integer = Math.Min(Me.PictureBox1.Height - 1, Math.Max(0, Me.Smax.Top - Me.PictureBox1.Top + Me.Smax.Height)) + Me.PictureBox1.Top
Dim num4 As Integer = Math.Min(Me.PictureBox1.Height - 1, Math.Max(0, Me.Smin.Top - Me.PictureBox1.Top)) + Me.PictureBox1.Top
gxoff.DrawLine(pen, Me.PictureBox1.Left, num3, Me.PictureBox1.Left + Me.PictureBox1.Width, num3)
gxoff.DrawLine(pen, Me.PictureBox1.Left, num4, Me.PictureBox1.Left + Me.PictureBox1.Width, num4)
gxoff.DrawLine(pen, num1, Me.PictureBox1.Top, num1, Me.PictureBox1.Height + Me.PictureBox1.Top)
gxoff.DrawLine(pen, num2, Me.PictureBox1.Top, num2, Me.PictureBox1.Height + Me.PictureBox1.Top)
pen.DashStyle = DashStyle.Solid
pen.Width = 2.0F
gxoff.DrawLine(pen, num1, num3, num1, num4)
gxoff.DrawLine(pen, num2, num3, num2, num4)
If Me.Hmin.Left < Me.Hmax.Left Then
gxoff.DrawLine(pen, num1, num3, num2, num3)
gxoff.DrawLine(pen, num1, num4, num2, num4)
Else
gxoff.DrawLine(pen, Me.PictureBox1.Left, num3, num1, num3)
gxoff.DrawLine(pen, Me.PictureBox1.Left, num4, num1, num4)
gxoff.DrawLine(pen, num2, num3, Me.PictureBox1.Width + Me.PictureBox1.Left, num3)
gxoff.DrawLine(pen, num2, num4, Me.PictureBox1.Width + Me.PictureBox1.Left, num4)
End If
Catch
End Try
End Sub
私有子PictureBox1\u Paint(发送方作为对象,e作为PaintEventArgs)处理PictureBox1.Paint
尝试
将gxoff变暗为图形
Dim pen As pen=新笔(Color.Azure)
gxoff.DrawImage(Me.PictureBox1.Image,新矩形(Me.PictureBox1.Left,Me.PictureBox1.Top,Me.PictureBox1.Width,Me.PictureBox1.Height),新矩形(0,0,Me.PictureBox1.Image.Width,Me.PictureBox1.Image.Height),GraphicsUnit.Pixel)
pen.DashStyle=DashStyle.Dash
作为整数的Dim num1=Math.Min(Me.PictureBox1.Width-1,Math.Max(0,Me.Hmax.Left-Me.PictureBox1.Left+7))+Me.PictureBox1.Left
作为整数的Dim num2=Math.Min(Me.PictureBox1.Width-1,Math.Max(0,Me.Hmin.Left-Me.PictureBox1.Left+7))+Me.PictureBox1.Left
作为整数的Dim num3=Math.Min(Me.PictureBox1.Height-1,Math.Max(0,Me.Smax.Top-Me.PictureBox1.Top+Me.Smax.Height))+Me.PictureBox1.Top
Dim num4作为整数=Math.Min(Me.PictureBox1.Height-1,Math.Max(0,Me.Smin.Top-Me.PictureBox1.Top))+Me.PictureBox1.Top
gxoff.抽绳(钢笔,Me.PictureBox1.Left,num3,Me.PictureBox1.Left+Me.PictureBox1.Width,num3)
gxoff.抽绳(钢笔,Me.PictureBox1.Left,num4,Me.PictureBox1.Left+Me.PictureBox1.Width,num4)
gxoff.抽绳(钢笔,num1,Me.PictureBox1.Top,num1,Me.PictureBox1.Height+Me.PictureBox1.Top)
gxoff.抽绳(钢笔、num2、Me.PictureBox1.Top、num2、Me.PictureBox1.Height+Me.PictureBox1.Top)
pen.DashStyle=DashStyle.Solid
笔宽=2.0F
gxoff.拉线(pen、num1、num3、num1、num4)
gxoff.拉线(pen、num2、num3、num2、num4)
如果Me.Hmin.Left
处理画框的绘制事件
您想画线。谢谢,但这不会直接在图像上绘制吗?我想在上面画画,这样线条就可以移动了。。比如photoshop中的一个图层..当你自己测试它时发生了什么?它根本没有画任何东西。。。刚刚用当前代码更新了帖子。永远不要写Try/Catch em all do nothing代码。用gxoff=e.Graphics修复此错误。不要使用DrawImage(),PictureBox已经解决了这个问题。