Исключение нехватки памяти при работе с изображениями в .NET (VB.Net 2008) - PullRequest
1 голос
/ 16 июня 2011

Я сталкиваюсь со странной проблемой при работе с большими изображениями (размер около 48 МБ, файл Tiff, содержащий 175 страниц).Теперь, когда я пытаюсь преобразовать Imagefile в растровое изображение и выполняю какую-то операцию, система случайным образом выдает «Исключение из нехватки памяти»

Ниже приведен мой фрагмент кода.Я получаю сообщение об ошибке (случайно) в строке "pages = New Bitmap (lorigionalFile)", где LoriginalFile имеет тип изображения, а Page имеет изображение.

Так что, пожалуйста, сообщите мне, что нужно сделать, чтобы удалить этот тип ошибки или остановитьутечка памяти.


        Dim lorigionalFile As System.Drawing.Image
        Dim SaveEncodeParam As EncoderParameter 'Encoder parameter to create multi page image
        Dim EncoderParams As EncoderParameters = New EncoderParameters(1) 'Encoder parameter Array
        Dim pages As Bitmap 'Used to save image page
        Dim NextPage As Bitmap 'Used to save next image page
        Dim PageNumber As Integer
        Lfr = File.Open(FileName, FileMode.Open, FileAccess.ReadWrite)

        lorigionalFile = System.Drawing.Image.FromStream(Lfr)

        ''Get number of page count in image
        PageNumber = getPageNumber(lorigionalFile)

        'set first page as active frame
        cintPagenumber = PageNumber

        'loop to every page of attached document
        For i As Integer = 0 To PageNumber - 1
            'set active from as per loop variable
            lorigionalFile.SelectActiveFrame(FrameDimension.Page, i)

            'Will get errow in below line(randomly), when there are other programs running in background
            pages = New Bitmap(lorigionalFile)

               'image store in Image
                CalImageContainer.Add(pages)
                'make a copy on image container
                CalImageContainerCopy.Add(pages)

        Next
        Lfr.Close()

    End Try

Спасибо

Pratik vohera

1 Ответ

0 голосов
/ 16 июня 2011

Я не знаю VB, но похоже, что вы создаете новую растровую память в цикле for выше, не освобождая память между ними.

Используйте Imagemagick вместо того, чтобы извлекать изображения из tif, а затем работайте с каждым из них.

Просто мысль.

...