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() 。此外,您应该只构建一次图像并检查一次宽度/高度,而不是解码两次。

在 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 回答