参数无效错误 - VB.Net - 为什么我收到此错误?

时间:2016-06-12 01:17:06

标签: vb.net image runtime-error

我收到了这个奇怪的错误 -

  

“参数无效”

处理图片时。我创造了许多很多图像 - 一次拍摄多达50张。我不清楚这个错误是什么。记忆?在完成计算后我处理了位图。任何见解都会有所帮助。感谢。

Private Async Function TakePhoto(ByVal keyword As String) As task

    Await Task.Delay(WaitMs)
    'System.Threading.Thread.Sleep(WaitMs)

    Try
        My.Computer.Audio.Play(Directory.GetCurrentDirectory + "\" + "iphone_camera.wav")
        Dim pic = New Bitmap(WebKitBrowser1.Width, WebKitBrowser1.Height)
        WebKitBrowser1.DrawToBitmap(pic, New Rectangle(0, 0, pic.Width, pic.Height))

        Dim fileName = Directory.GetCurrentDirectory + "\" + "test_ss.bmp"
        Dim CropRect As New Rectangle(240, 190, 1000, 2800)
        Dim OriginalImage1 = Image.FromFile(fileName)
        Dim CropImage1 = New Bitmap(CropRect.Width, CropRect.Height)
        Using grp = Graphics.FromImage(CropImage1)
            grp.DrawImage(OriginalImage1, New Rectangle(0, 0, CropRect.Width, CropRect.Height), CropRect, GraphicsUnit.Pixel)
            OriginalImage1.Dispose()
            CropImage1.Save(fileName)
            CropImage1.Dispose()
        End Using

        fileName = Directory.GetCurrentDirectory + "\" + "test_ss.bmp"
        CropRect = New Rectangle(0, 0, 1000, 1400)
        Dim OriginalImage2 = Image.FromFile(fileName)
        Dim CropImage2 = New Bitmap(CropRect.Width, CropRect.Height)
        Using grp = Graphics.FromImage(CropImage2)
            grp.DrawImage(OriginalImage2, New Rectangle(0, 0, CropRect.Width, CropRect.Height), CropRect, GraphicsUnit.Pixel)
            OriginalImage2.Dispose()
            'CropImage2.Save(Directory.GetCurrentDirectory + "\" + keyword + "_" + "test_ss_top.bmp")
            CropImage2.Save(Directory.GetCurrentDirectory + "\" + "test_ss_top.bmp")
            CropImage2.Dispose()
        End Using

        fileName = Directory.GetCurrentDirectory + "\" + "test_ss.bmp"
        CropRect = New Rectangle(0, 1401, 1000, 1330)
        Dim OriginalImage3 = Image.FromFile(fileName)
        Dim CropImage3 = New Bitmap(CropRect.Width, CropRect.Height)
        Using grp = Graphics.FromImage(CropImage3)
            grp.DrawImage(OriginalImage3, New Rectangle(0, 0, CropRect.Width, CropRect.Height), CropRect, GraphicsUnit.Pixel)
            OriginalImage3.Dispose()
            'CropImage3.Save(Directory.GetCurrentDirectory + "\" + keyword + "_" + "test_ss_bottom.bmp")
            CropImage3.Save(Directory.GetCurrentDirectory + "\" + "test_ss_bottom.bmp")
            CropImage3.Dispose()
        End Using
    Catch ex As Exception
        Dim err = ex.Message
    End Try


End Function

2 个答案:

答案 0 :(得分:1)

这一切都源于您处理一次性物品的顺序。当他们仍在使用时,您手动处理。尝试将Using中的一次性包装在声明时包装,当它超出范围时将以正确的顺序处理。

例如

Dim fileName = Directory.GetCurrentDirectory + "\" + "test_ss.bmp"
Dim CropRect As New Rectangle(240, 190, 1000, 2800)
Using OriginalImage1 = Image.FromFile(fileName)
    Using CropImage1 = New Bitmap(CropRect.Width, CropRect.Height)
        Using grp = Graphics.FromImage(CropImage1)
            grp.DrawImage(OriginalImage1, New Rectangle(0, 0, CropRect.Width, CropRect.Height), CropRect, GraphicsUnit.Pixel)
            CropImage1.Save(fileName)
        End Using
    End Using
End Using

答案 1 :(得分:0)

Sub image()
    If connection.State = ConnectionState.Closed Then
        connection.Open()
    End If
    Dim arrImage() As Byte
    Dim strImage As String
    Dim myMs As New IO.MemoryStream
    '
    If Not IsNothing(Form2.picPhoto.Image) Then
        Form2.picPhoto.Image.Save(myMs, Form2.picPhoto.Image.RawFormat)
        arrImage = myMs.GetBuffer
        strImage = "?"
    Else
        arrImage = Nothing
        strImage = "NULL"
    End If


    Dim dt As New DataTable
    Dim da As OleDbDataAdapter = New OleDbDataAdapter(" SELECT * FROM fruits WHERE Name_Of_Fruit = '" & ComboBox1.SelectedValue & "'", connection)

    da.Fill(dt)
    If dt.Rows.Count > 0 Then



        If Not IsDBNull(dt.Rows(0).Item("Picture")) Then
            arrImage = CType(dt.Rows(0).Item("Picture"), Byte())
            For Each ar As Byte In arrImage
                myMs.WriteByte(ar)
            Next
            Form2.picPhoto.Image = System.Drawing.Image.FromStream(myMs)
        End If
    Else
        MessageBox.Show("Record Not Found", "")
    End If
End Sub

结束Classstrong text