如何在Graphics.DrawImage中扩展绘制区域c#

时间:2017-02-26 16:15:07

标签: c# windows forms image graphics

我有一个矩形(rec),其中包含较大图像中包含较小图像的区域。我想在Picturebox上显示这个较小的图像。然而,我真正在做的是使用较小的图像作为图像检测器,用于333x324的较大图像。所以我想要做的是使用较小的图像矩形的坐标,然后绘制到Picturebox,从矩形的左侧开始,向外向333宽度和324高度。

目前我的代码可以使用,但它只显示用于检测目的的小图像。我想让它显示较小的图像+ 300宽度和+ 300高度。

我摆弄了这段代码几个小时,我必须做一些非常基本的错误。如果有人可以帮助我,我会非常感激!

我的课程代码:

public static class Worker
{

    public static void doWork(object myForm)
    {
        //infinitely search for maps
        for (;;)
        {


            //match type signature for Threading
            var myForm1 = (Form1)myForm;

            //capture screen
            Bitmap currentBitmap = new Bitmap(CaptureScreen.capture());

            //detect map
            Detector detector = new Detector();
            Rectangle rec = detector.searchBitmap(currentBitmap, 0.1);

            //if it actually found something
            if(rec.Width != 0)
            {
                // Create the new bitmap and associated graphics object
                Bitmap bmp = new Bitmap(rec.X, rec.Y);
                Graphics g = Graphics.FromImage(bmp);

                // Draw the specified section of the source bitmap to the new one
                g.DrawImage(currentBitmap, 0,0, rec, GraphicsUnit.Pixel);

                // send to the picture box &refresh;
                myForm1.Invoke(new Action(() =>
                {
                    myForm1.getPicturebox().Image = bmp;
                    myForm1.getPicturebox().Refresh();
                    myForm1.Update();
                }));

                // Clean up
                g.Dispose();
                bmp.Dispose();

            }

            //kill
            currentBitmap.Dispose();

            //do 10 times per second
            System.Threading.Thread.Sleep(100); 

        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果我理解正确,rec变量包含一个正确XY的矩形,用于标识Width=333Height=324的矩形。

所以在if语句中,首先设置所需的大小:

rec.Width = 333;
rec.Height = 324;

然后,请注意Bitmap构造函数需要宽度和高度,因此请更改

Bitmap bmp = new Bitmap(rec.X, rec.Y);

Bitmap bmp = new Bitmap(rec.Width, rec.Height);

就是这样 - 其余的代码可以保持原样。