将图形拆分为c#

时间:2010-11-04 17:48:03

标签: c#

我的代码:

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();


        }

    }
}

此代码有时不会每次都有效,我不知道代码有什么问题。 我也想将图像分成3x3矩阵,但我不知道如何。

请帮忙!

输出(第1次无帧,第2次右侧):

ImageLink的:

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

2 个答案:

答案 0 :(得分:0)

在g.Dispose

之后添加pictureBox1.Invalidate();

答案 1 :(得分:0)

出于demonstartino的目的,我在表格和第二个图片框中添加了一个按钮,其整数从1-9开始。显然你不需要这样做。这是代码:

        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);
    }