C # Недостаточно памяти при создании растрового изображения

Я создаю приложение (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. Однако в процессе я получаю ошибку «Недостаточно памяти». Что я здесь делаю неправильно?

Спасибо за вашу помощь.

11
задан Alex 30 November 2010 в 21:09
поделиться