图片标记
本人在做一个图片浏览器,主要功能是需要对加载进来的图片,进行添加标记(划矩形并获得矩形面积,直线,椭圆,箭头,测量角度,文字标示等),并能够对添加进来的每个标记可以选定删除、拖动等,有没有大大可以给个思路或参考实例,新人虚心求教,求大大门赐教。 图片处理 图片浏览器 --------------------编程问答-------------------- 先将你要的功能细分吧 picturebox是你必要的控键我之前有设计一支将图片读进来后 可以将图片切离
然后可以移动图片的功能 你参看看看吧
标尺没有设计 你自己上网找找这部分的代码
将这些功能拼拼溴溴你要的程序就出来了
Imports System.Drawing--------------------编程问答--------------------
Imports System.Drawing.Imaging
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.White)
PictureBox1.Image = bmp
c = 4
End Sub
Dim mdp, mdq As Point '座標點
Dim x, y, c As New Integer '取得x,y座標
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles PictureBox1.MouseDown
PictureBox1.Invalidate()
mdp = e.Location '起始點
c += 1
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles PictureBox1.MouseUp
Dim G As Graphics = PictureBox1.CreateGraphics
mdq = e.Location
Dim NEWBITMAP As New Bitmap(PictureBox1.Image)
Dim cloneBitmap As Bitmap
Dim newpic As New Form2
Dim xpoint, ypoint As Integer '左上角座標點
c += 1
If c = 3 Then
xpoint = Math.Min(mdp.X, mdq.X)
ypoint = Math.Min(mdp.Y, mdq.Y)
Dim format As PixelFormat = NEWBITMAP.PixelFormat
Dim W, H As Integer
W = Math.Abs(mdq.X - mdp.X)
H = Math.Abs(mdq.Y - mdp.Y)
Dim acpart As New Rectangle(xpoint, ypoint, W, H)
If Not W = 0 And Not H = 0 Then
cloneBitmap = NEWBITMAP.Clone(acpart, format)
newpic.PictureBox1.Image = cloneBitmap
End If
With G
.DrawLine(Pens.Black, mdp.X, mdp.Y, mdq.X, mdp.Y)
.DrawLine(Pens.Black, mdp.X, mdp.Y, mdp.X, mdq.Y)
.DrawLine(Pens.Black, mdp.X, mdq.Y, mdq.X, mdq.Y)
.DrawLine(Pens.Black, mdq.X, mdp.Y, mdq.X, mdq.Y)
End With
newpic.Show()
acpart = Nothing
c = 1
End If
NEWBITMAP = Nothing
newpic = Nothing
G.Dispose()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
x = mdp.X
y = mdp.Y
Me.Label1.Text = "起點座標X:" & x & "起點座標Y:" & y
x = mdq.X
y = mdq.Y
Me.Label2.Text = "終點座標X:" & y & "終點座標Y:" & y
End Sub
Private Sub 檔案ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 檔案ToolStripMenuItem.Click
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
PictureBox1.Load(OpenFileDialog1.FileName)
c = 0
End If
End Sub
End Class
Public Class Form2
'处理图片拖动
Private m_Leftx As Integer = 152
Private m_Lefty As Integer = 0
Dim m_MousePosX As Integer
Dim m_MousePosY As Integer
Dim m_DriftX As Integer
Dim m_DriftY As Integer
'缩放率
Dim m_StrecthX As Double
Dim m_StrecthY As Double
'label起始相对于picturebox的位置
Dim m_L_GW_RY_X As Integer
Dim m_L_GW_RY_Y As Integer
Dim m_L_STATION_ZF_X As Integer
Dim m_L_STATION_ZF_Y As Integer
'是否第一次缩放
Dim m_L_FIRST As Boolean = True
'当鼠标按下时,将鼠标变成手形,并且记录下当前鼠标的位置
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Me.Cursor = System.Windows.Forms.Cursors.Hand
m_MousePosX = e.X
m_MousePosY = e.Y
'GetLabelPositon()
End Sub
'根据偏移量计算出的图片位置,重画图片
Private Sub picturemove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim myBit As New System.Drawing.Bitmap(PictureBox1.Image)
Dim myPicGrh As System.Drawing.Graphics = Me.PictureBox1.CreateGraphics
myPicGrh.Clear(Me.PictureBox1.BackColor)
myPicGrh.DrawImageUnscaled(myBit, m_Leftx - 152, m_Lefty)
' StretchLabel()
myBit.Dispose()
myPicGrh.Dispose()
End Sub
'处理鼠标按键抬起的事件,根据鼠标按下时保存的鼠标位置,和当前鼠标的位置,计算鼠标移动偏移量,借此调用移动图片的函数,移动图片
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
m_DriftX = m_MousePosX - e.X
m_DriftY = m_MousePosY - e.Y
m_Leftx = m_Leftx - m_DriftX
m_Lefty = m_Lefty - m_DriftY
picturemove(sender, e)
Me.Cursor = System.Windows.Forms.Cursors.Arrow
End Sub
End Class
感谢ctjh900801的帮助,但还不是我想要的功能,图片切割的我知道怎么做,但我需要的是对到入的图片进行标识,类似在图片上涂鸦,只是希望涂鸦部分能选中和指定删除。
还有哪位大神能帮助小弟下,现在就差这部分功能了。 --------------------编程问答-------------------- > 标记可以选定删除、拖动等
那你就得自己定义标记了,例如每个标记应有:
类别
位置
颜色
内容
等各种数据,然后每个图片对应一个标记列表,
显示图片后再显示每个标记。
然后处理鼠标事件,增加对标记的选中,移动,修改等操作。
--------------------编程问答-------------------- 那就用getpixl 和setpixl 这两个API去做吧 不过如果要照顾效率问题那就是另
一门学问了
呵呵
补充:.NET技术 , VB.NET