Я создаю приложение (форма 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;
}
Строка, которая дает сбой и имеет исключение Out of Memory:
bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
В основном это то, что это делаетберет прямоугольник 100x90 вокруг указателя мыши и вытягивает его в zoomBox, который является элементом управления picturebox.Тем не менее, в процессе, я получаю ошибку Out Of Memory.Что я здесь делаю неправильно?
Спасибо за вашу помощь.