我有一个矩形(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);
}
}
}
答案 0 :(得分:0)
如果我理解正确,rec
变量包含一个正确X
和Y
的矩形,用于标识Width=333
和Height=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);
就是这样 - 其余的代码可以保持原样。