zoukankan      html  css  js  c++  java
  • 控件取图片和矩形框 小测试

    #region 获取相机图片
    /// <summary>
    /// 剪裁
    /// </summary>
    /// <param name="b">原始Bitmap</param>
    /// <param name="StartX">开始坐标X</param>
    /// <param name="StartY">开始坐标Y</param>
    /// <param name="iWidth">宽度</param>
    /// <param name="iHeight">高度</param>
    /// <returns>剪裁后的Bitmap</returns>
    public static Bitmap KiCut(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)
    {
    if (b == null)
    {
    return null;
    }

    int w = b.Width;
    int h = b.Height;
    if (StartX >= w || StartY >= h)
    {
    return null;
    }

    if (StartX + iWidth > w)
    {
    iWidth = w - StartX;
    }

    if (StartY + iHeight > h)
    {
    iHeight = h - StartY;
    }
    try
    {
    Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);
    Graphics g = Graphics.FromImage(bmpOut);
    g.DrawImage(b, new System.Drawing.Rectangle(0, 0, iWidth, iHeight), new System.Drawing.Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel);
    g.Dispose();
    return bmpOut;
    }
    catch
    {
    return null;
    }
    }
    #endregion

    #region 点击图片事件
    bool MouseIsDown = false;
    System.Drawing.Rectangle MouseRect = System.Drawing.Rectangle.Empty; //矩形(为鼠标画出矩形选区)

    /// <summary>
    /// 获取点温度
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
    if (pictureBox1.Image != null)
    {
    MouseIsDown = true;
    DrawStart(sender, e.Location);
    }
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
    if (pictureBox1.Image != null)
    {
    if (MouseIsDown)
    {
    ResizeToRectangle(sender, e.Location);
    }
    }

    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
    if (pictureBox1.Image == null) return;

    this.Capture = false;
    Cursor.Clip = System.Drawing.Rectangle.Empty;
    MouseIsDown = false;
    DrawRectangle(sender);

    if (MouseRect.Height < 2 && MouseRect.Width < 2)
    {
    pictureBox1.Refresh();
    MouseRect = new Rectangle(MouseRect.X, MouseRect.Y, 2, 2);
    Graphics g = pictureBox1.CreateGraphics();
    g.DrawRectangle(new Pen(Color.Black), MouseRect);
    string temp = _Irservice.GetMaxTemp(MouseRect.X.ToString(), MouseRect.Y.ToString()).TempMax.ToString();
    g.DrawString(temp + "℃", new Font("宋体", 8, FontStyle.Regular), Brushes.Black, MouseRect.X, MouseRect.Y, StringFormat.GenericDefault);
    }
    else {
    pictureBox1.Refresh();
    Graphics g = pictureBox1.CreateGraphics();
    g.DrawRectangle(new Pen(Color.Black), MouseRect);
    WindowsFormsApplication1.Tools.IrService.Temp te = new IrService.Temp();
    te = (WindowsFormsApplication1.Tools.IrService.Temp)(_Irservice.GetMaxTemp(MouseRect.X.ToString(), MouseRect.Y.ToString(), MouseRect.Width.ToString(), MouseRect.Height.ToString()));
    g.DrawString(te.TempMax + "℃" + " " + "X:" + te.MaxX + " " + "Y:" + te.MaxY, new Font("宋体", 8, FontStyle.Regular), Brushes.Black, MouseRect.X + 2, MouseRect.Y + 2, StringFormat.GenericDefault);
    }
    MouseRect = System.Drawing.Rectangle.Empty;
    }

    private void ResizeToRectangle(object sender, System.Drawing.Point p)
    {
    DrawRectangle(sender);
    MouseRect.Width = p.X - MouseRect.Left;
    MouseRect.Height = p.Y - MouseRect.Top;
    DrawRectangle(sender);
    }
    private void DrawRectangle(object sender)
    {
    System.Drawing.Rectangle rect = ((PictureBox)sender).RectangleToScreen(MouseRect);
    ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
    }
    private void DrawStart(object sender, System.Drawing.Point StartPoint)
    {
    ((PictureBox)sender).Capture = true;
    Cursor.Clip = ((PictureBox)sender).RectangleToScreen(((PictureBox)sender).Bounds);
    MouseRect = new System.Drawing.Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
    }
    #endregion

    至少证明我们还活着
  • 相关阅读:
    FFmpeg 结构体学习(八):FFMPEG中重要结构体之间的关系
    FFmpeg 结构体学习(七): AVIOContext 分析
    FFmpeg 结构体学习(六): AVCodecContext 分析
    FFmpeg 结构体学习(五): AVCodec 分析
    FFmpeg 结构体学习(四): AVFrame 分析
    FFmpeg 结构体学习(三): AVPacket 分析
    Android 通过onTouchEvent判断是否为双击事件
    FFmpeg 结构体学习(二): AVStream 分析
    Java 使用 int 数据计算百分比
    Android 关于解决MediaButton学习到的media控制流程
  • 原文地址:https://www.cnblogs.com/pengde/p/6478095.html
Copyright © 2011-2022 走看看