CSharp - Creating C# 在创建位图时内存不足

  显示原文与译文双语对照的内容

我正在创建一个应用程序( Windows 表单),它允许用户根据他们选择( 拖动以选择区域)的位置获取屏幕截图。 我想添加一个小的"预览窗格",这样用户可以选择更精确的( 较大像素) 。 在mousemove事件上,我有以下代码。


private void falseDesktop_MouseMove(object sender, MouseEventArgs e)


 {


 zoomBox.Image = showZoomBox(e.Location);


 zoomBox.Invalidate();


 bmpCrop.Dispose();


 }



private Image showZoomBox(Point curLocation)


 {


 Point start = new Point(curLocation.X - 50, curLocation.Y - 50);


 Size size = new Size(100, 90);


 Rectangle rect = new Rectangle(start, size);


 Image selection = cropImage(falseDesktop.Image, rect);


 return selection;


 }



private static Bitmap bmpCrop;


private static Image cropImage(Image img, Rectangle cropArea)


 {


 if (cropArea.Width!= 0 && cropArea.Height!= 0)


 {


 Bitmap bmpImage = new Bitmap(img);


 bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);


 bmpImage.Dispose();


 return (Image)(bmpCrop);


 }


 return null;


 }



失败并具有内存溢出异常的行是:


bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);



基本上它是在鼠标指针周围使用 100 x90 rectangle,并将它的拉入 zoomBox,这是一个,控件。 但是,在这个过程中,我得到了一个内存。 我在这里做错误的事情是什么?

感谢你的帮助。

时间: 原作者:

内存中内存不足,通常是错误的rect或者点- red 。 i start 或者Y + Size.Width 或者+ X 大于图像的高度或者宽度时,有负X 或者Y 。

原作者:
...