VBNet WinFrom 如何开发一个图片编辑器

我们开发一个简单的图片编辑器,包含有以下几个功能:

  • 图片放大缩小
  • 图片旋转
  • 区域截图
  • 绘制箭头
  • 绘制方框
  • 绘制文字
  • 绘制涂鸦
    首先我们解决最简单的,图片放大和缩小:
G_All.DrawImage(IM_Input, R_2, R_1, GraphicsUnit.Pixel)

下面截取一下原函数的解释:
在这里插入图片描述
解决图片的旋转

#Region "旋转"
    ''' <summary>
    ''' 旋转图片
    ''' </summary>
    ''' <param name="bmp">输入图片</param>
    ''' <param name="angle">旋转的度数</param>
    ''' <param name="bkColor">旋转的填充颜色,默认透明</param>
    ''' <returns>返回旋转后图像</returns>
    ''' <remarks></remarks>
    Public Function KiRotate(bmp As Bitmap, angle As Single, Optional bkColor As Color = Nothing) As Bitmap
        Dim w As Integer = bmp.Width + 2
        Dim h As Integer = bmp.Height + 2
        Dim pf As PixelFormat
        If IsNothing(bkColor) Then bkColor = Color.Transparent
        If bkColor = Color.Transparent Then
            pf = PixelFormat.Format32bppArgb
        Else
            pf = bmp.PixelFormat
        End If
        Dim tmp As New Bitmap(w, h, pf)
        Dim mtrx As New Matrix()
        mtrx.Rotate(angle)
        Dim path As New GraphicsPath()
        path.AddRectangle(New RectangleF(0.0F, 0.0F, w, h))
        Dim rct As RectangleF = path.GetBounds(mtrx)
        Dim dst As New Bitmap(CInt(rct.Width), CInt(rct.Height), pf)
        Dim g As Graphics = Graphics.FromImage(tmp)
        g.Clear(bkColor)
        g.DrawImageUnscaled(bmp, 1, 1)
        g.Dispose()
        g = Graphics.FromImage(dst)
        g.Clear(bkColor)
        g.TranslateTransform(-rct.X, -rct.Y)
        g.RotateTransform(angle)
        g.InterpolationMode = InterpolationMode.HighQualityBilinear
        g.DrawImageUnscaled(tmp, 0, 0)
        g.Dispose()
        mtrx.Dispose()
        path.Dispose()
        tmp.Dispose()
        Return dst
    End Function
#End Region

旋转方法涉及到方法很多,我也是找的,未做深入理解.
要实现区域截图需要也很简单,和图片的放大缩小用的是一个重载方法.

G_this.DrawImage(IM_All, drawR_out_2, drawR_out_1, GraphicsUnit.Pixel)

绘制方案:

  1. 在MouseDown记录下绘制的起点
  2. 在MouseMove修改绘制的终点
  3. 在MouseUp完成绘制

绘制箭头,

 Using p As New Pen(Color.Red, UC_Tool.LineWidth)
                    G_Draw.SmoothingMode = SmoothingMode.AntiAlias
                    p.StartCap = LineCap.Round
                    p.EndCap = LineCap.ArrowAnchor
                    G_Draw.DrawLine(p, item.P1x - 偏移x, item.P1y - 偏移y, item.P2x - 偏移x, item.P2y - 偏移y)
                End Using

绘制方框

 G_Draw.DrawRectangle(p, Rect)

绘制文字

 G_Draw.DrawString(item.Str, New Font("宋体", 9), Brushes.Red, Rect, F)

绘制涂鸦

 Using p_width As New Pen(Color.Red, UC_Tool.LineWidth)
          For Each item In Draw_涂鸦s
              Dim LinePoints As New List(Of Point)
              LinePoints.Add(New Point(item.C_DrawInfo.P1x - 偏移x, item.C_DrawInfo.P1y - 偏移y))
              For Each p In item.Points
                  LinePoints.Add(New Point(p.X - 偏移x, p.Y - 偏移y))
              Next
              If item.C_DrawInfo.P2End = True Then LinePoints.Add(New Point(item.C_DrawInfo.P2x - 偏移x, item.C_DrawInfo.P2y - 偏移y))
              If LinePoints.Count > 1 Then
                  G_Draw.DrawLines(p_width, LinePoints.ToArray)
              End If
          Next
      End Using
      ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值