процесс сжатия изображения выходит из памяти ошибка - PullRequest
0 голосов
/ 07 апреля 2011

Я использую многопоточный процесс сжатия изображений. Исходный файл 1280x Файл PNG с высоким разрешением 960, около 1800 КБ. Мне нужно сжать до файла JPEG <70 КБ. Когда я обрабатываю несколько автомобилей, процесс работает нормально. когда я обрабатываю более 20 автомобилей, у меня начинает появляться ошибка памяти. Вот код </p>

частный статический ImageCodecInfo GetEncoderInfo (String mimeType) { int j; ImageCodecInfo [] encoders; encoders = ImageCodecInfo.GetImageEncoders (); для (j = 0; j

    public static void SaveAsJpg(string inFilePath = null, string outputFileName = null, long compression = 70, long quality = 70)
    {
        System.Drawing.Image orgimage = System.Drawing.Image.FromFile(inFilePath);
        var imgIn = new Bitmap(orgimage);
        var imgOut = new Bitmap(imgIn.Width, imgIn.Height);

        Graphics g = Graphics.FromImage(imgOut);
        g.Clear(Color.White);
        g.DrawImage(imgIn, 0, 0, imgIn.Width, imgIn.Height);

        EncoderParameters encoding = new EncoderParameters(2);
        encoding.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, compression);
        encoding.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
        ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");

        imgOut.Save(outputFileName, myImageCodecInfo, encoding);
    }

Заранее спасибо за любые предложения.

1 Ответ

0 голосов
/ 07 апреля 2011

Я думаю, вам нужно избавиться от графических объектов перед выходом из метода.

g.Dispose();
orgiImage.Dispose();
imgIn.Dispose();
imgOut.Dispose();

Удаление System.drawing объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...