2016-06-12 143 views
-1

我得到这个奇怪的错误 -参数无效ERROR - VB.Net - 为什么我得到这个错误?

“参数无效”

与图像时。我制作了许多许多图像 - 一次最多可达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 
+0

你尝试调试和单步调试代码到底在哪被抛出的错误来缩小? – Nkosi

+0

我可以尝试,但问题是程序工作了一段时间 - 比如40张左右 - 然后这个错误突然出现,所以很难跨过,因为你永远不知道错误何时出现。有什么建议么? – PiE

+0

检查这个http://stackoverflow.com/a/13914830/5233410 – Nkosi

回答

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 
+0

好的 - 让我试试这个 - 我应该处理这些图像以确保我没有收到“内存不足错误”?你怎么看? – PiE

+0

您可以处理不再使用的资源,以释放它们可能占用的内存或其他可能使用的资源。 – Nkosi

+0

这似乎现在工作 - 我需要做更多的测试,虽然...谢谢 – PiE

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文本

+0

代码只有答案是皱眉。请尝试使用control或cmd缩进一个缩进级别(请参阅编辑栏中的帮助),并请解释修复代码的相关内容,并突出显示主要关注或最相关改进的区域。 – clearlight

相关问题