2016-06-12 14 views
-1

私はこの奇妙なエラーを取得しています。私はショットで多くの、多くのイメージを作成しています - 最大50。このエラーが何であるかはっきりしていません。記憶?私は計算を完了した後にビットマップを破棄します。どんな洞察も役に立つでしょう。ありがとう。パラメータが無効ですエラー - VB.Net - なぜこのエラーが発生しますか? </blockquote> <p></p>は、画像を扱うとき</p> <blockquote> <p>"有効でないパラメータ" -

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

Ok - 私はこれを試してみましょう - 私は "メモリ不足のエラー"が得られないことを確認するためにイメージを処分する必要がありますか?あなたの考えは? – 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

コードのみの答えはぶち壊されます。 CtrlキーまたはCtrlキーを押しながらさらにインデントレベルを押してください(編集バーの?ヘルプを参照)。 – clearlight

関連する問題