开发者

Split Graphic into pieces c#

开发者 https://www.devze.com 2023-01-23 07:39 出处:网络
My Code: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;

My Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TouchlessLib;

namespace WebCam2
{
    public partial class Form1 : Form
    {
        TouchlessMgr ngr = new TouchlessMgr();
        Bitmap _overlay;
        public Form1()
        {
            InitializeComponent();
            foreach (Camera c in ngr.Cameras)
            {
                listBox1.Items.Add(c);
                listBox1.SelectedValueChanged += new EventHandler(listBox1_SelectedValueChanged);

            }
        }

        void listBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            ngr.CurrentCamera = (Camera) listBox1.SelectedItem;
            ngr.CurrentCamera.OnImageCaptured += c_OnImageCaptured;
        }

        void c_OnImageCaptured(object sender, CameraEventArgs e)
        {
            pictureBox1.Image = ngr.CurrentCamera.GetCurrentImage();
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {


        }

        public EventHandler<CameraEventArgs> cam_OnImageCaptured { get; set; }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            List <Graphics> list = new List <Graphics>();
            ngr.RefreshCameraList();
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            Brush redBrush = new SolidBrush(Color.Red开发者_运维百科);
            Pen pen = new Pen(redBrush,3);
            for ( int i = 0; i < pictureBox1.Width; i = (pictureBox1.Width/3)+i)
            {
                for (int y = 0; y < pictureBox1.Height; y = (pictureBox1.Height / 3) + y)
                {
                    g.DrawRectangle(pen, i, y, pictureBox1.Width / 3, pictureBox1.Height / 3);
                }
            }
            g.Dispose();


        }

    }
}

This code works only sometimes not everytime, i dont know whats wrong with the code. I also want to split the image into a 3x3 matrix but i do not know how.

Please help!

Output(1st Time no frame,2nd time right):

ImageLink:

http://www.imagebanana.com/view/4j58i05z/Unbenannt2.png


Add pictureBox1.Invalidate(); after g.Dispose


for demonstartino purposes, I've added a button to a form and a second picturebox, with an integer that cycles from 1-9. Obviously you won't need to do this. here is the code:

        private void button1_Click(object sender, EventArgs e)
    {
        mLastRect++;
        if (mLastRect > 9)
            mLastRect = 0;
        Bitmap part = new Bitmap(pictureBox1.Image.Width / 3, pictureBox1.Image.Height / 3);
        Graphics g = Graphics.FromImage(part);
        Rectangle partRect = new Rectangle(0, 0, part.Width, part.Height);
        Rectangle sourceRect = GetRect(mLastRect);
        g.DrawImage(pictureBox1.Image, partRect, sourceRect, GraphicsUnit.Pixel);
        pictureBox2.Image = part;
    }

    private Rectangle GetRect(int rectNo)
    {
        int rectLeft = (rectNo % 3) * (pictureBox1.Image.Width / 3);
        int rectTop = (rectNo / 3) * (pictureBox1.Image.Height / 3);
        return new Rectangle(rectLeft, rectTop, pictureBox1.Image.Width / 3, pictureBox1.Image.Height / 3);
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消