1

一連の画像 (通常は 50 以上、すべて 3 Mb 前後) の向きを確認しようとしています。それらの束をすでに処理しているときに、「メモリ不足」エラーが発生します。

だから私の質問は、最小のメモリを使用するために各画像を個別にチェックするにはどうすればよいですか?

私はvb.netとプログラミングにまったく慣れていないので、これが自分のタスクを実行する方法を理解できる唯一の方法でした:

  Dim MyFiles As New ArrayList()

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    TextBox2.Clear()

    If CheckBox2.Checked = True Then

        TextBox2.Text = "Checking the orientation of the images ..." & vbNewLine & vbNewLine

        For i As Integer = 0 To MyFiles.Count - 1

            TextBox2.AppendText("Checking " & MyFiles(i) & vbNewLine)
            If Image.FromFile(MyFiles(i)).Width < Image.FromFile(MyFiles(i)).Height Then
                TextBox2.AppendText(vbNewLine & "There are images with portrait orientation. Splitting aborted!" & vbNewLine)
                Return
            End If

        Next

        TextBox2.AppendText(vbNewLine & "All images are with landscape orientation." & vbNewLine)

    End If

    'ConvertBMP("C:\test.bmp", ImageFormat.Jpeg)

End Sub
4

1 に答える 1

1

Image.FromFileコマンドの周りにusing()をスローします。また、イメージを2回デコードするのではなく、イメージを1回作成し、幅/高さを1回確認する必要があります。

C#では次のようになります。

using (var img = Image.FromFile(filename))
{
    if (img.Width < img.Height)
        doSomething();
}

またはVB.Netで(私のVB.Netは少し錆びていますが、これは正しいと思います):

Dim img as Image
Using img = Image.FromFile(filename)
    If img.Width < img.Height
        TextBox2.AppendText(vbNewLine & "There are images with portrait orientation. Splitting aborted!" & vbNewLine)
        Return
    End If
End Using
于 2012-10-10T19:10:22.123 に答える