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