Я создаю приложение (Windows Form), которое позволяет пользователю делать снимки экрана в зависимости от выбранных ими мест (перетащите, чтобы выбрать область). Я хотел добавить небольшую «панель предварительного просмотра» с увеличенным масштабом, чтобы пользователь мог более точно выбрать желаемую область (большие пиксели). В событии 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);
В основном это происходит, так как она берет прямоугольник 100x90 вокруг указателя мыши и переносит его в zoomBox, который является элементом управления Picturebox. Однако в процессе я получаю ошибку «Недостаточно памяти». Что я здесь делаю неправильно?
Спасибо за вашу помощь.