0

Tiff ビューアーを作成しましたが、既に tiff 画像を表示できます。1200 DPI のような高解像度の場合を除きます。コードに問題の原因となっている回避策はありますか?

 Public Function GetTiffImage(path As String, page As Integer) As Image


        Dim ms As MemoryStream = Nothing
        Dim SrcImg As Image = Nothing
        Dim returnImage As Image = Nothing

        Try
            SrcImg = Image.FromFile(path)
            ms = New MemoryStream()
            Dim FrDim As New FrameDimension(SrcImg.FrameDimensionsList(0))
            SrcImg.SelectActiveFrame(FrDim, Page)
            SrcImg.Save(ms, ImageFormat.Tiff)
            returnImage = Image.FromStream(ms)
        Catch ex As Exception
            Throw ex
        Finally
            SrcImg.Dispose()
            GC.Collect()
            GC.WaitForPendingFinalizers()
        End Try

        Return returnImage
    End Function

前もって感謝します

4

2 に答える 2

1

私の経験では、このエラー メッセージは誤解を招きやすく、通常はOutOfMemoryException. IDisposableすべてのオブジェクトのクリーンアップに失敗しているため、メモリを失っていると思います。GC.Collect()それが必ずしも信頼できるアプローチではないことは理解しています。いくつかのブロックを入れてみてくださいusing。VBScript ではなく C# を使用しているため、正確な構文を示すことはできませんが、C# では次のようになります。

using (var SrcImg = Image.FromFile(path))
{
  using (var ms = MemoryStream())
  {
    var FrDim = new FrameDimension(SrcImg.FrameDimensionsList(0));
    SrcImg.SelectActiveFrame(FrDim, Page)
    SrcImg.Save(ms, ImageFormat.Tiff)
    using (var returnImage = Image.FromStream(ms))
    {
      return returnImage;
    }
  }
}
于 2013-08-01T08:39:28.620 に答える
0

メモリリークを防ぐために、関数の後に画像を処理するために解放する必要があるメモリ。コードに基づくこのサンプル コードは、メモリ リークを防ぐために変更されています。

Public Function GetTiffImage(path As String, page As Integer) As Image
    Using ms As New MemoryStream
        Using SrcImg As Image = Image.FromFile(path)
            Using returnImage As Image = Image.FromStream(ms)
                Try
                    Dim FrDim As New FrameDimension(SrcImg.FrameDimensionsList(0))
                    SrcImg.SelectActiveFrame(FrDim, page)
                    SrcImg.Save(ms, ImageFormat.Tiff)
                Catch ex As Exception
                    Throw ex
                End Try
                Return returnImage
            End Using
        End Using
    End Using
End Function
于 2016-10-31T08:11:50.683 に答える