Kamerabild(Livebild) soll alle 10 Sekunden automatisch als Bitmap gespeichert werden


Matt_4

Grünschnabel
Eine USB Kamera liefert ein Live-Bild. Nun soll ein Bild aus dem Stream rausgegriffen
und gespeichert werden. Das soll alle 10 Sekunden geschehen.
In folgender Funktion fehlt die Methode, wie ich der Variablen bmp das Bild übergeben
muss. Die darauffolgende Zeile habe ich bereits getestet(Das Speichern selbst würde
funktionieren, die Übergabe des Bildes funktioniert eben nicht).

Private Sub Speichern()
Me.Show()
Dim myCam As New iCam
Dim i As Integer = 0
Dim dateinamenszusatz As String
Dim bmp As Bitmap
dateinamenszusatz = i.ToString
bmp = '**********diese Zeile ist gemeint**********
bmp.Save("C:\MiniCam_Bilder\Bild" + dateinamenszusatz + ".bmp")
i = i + 1
Me.Close()
End Sub



Hier folgt nun die Vorgänger-Version des Programms mit allen relevanten Codezeilen.

Private myCam As iCam

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.picOutput.SizeMode = PictureBoxSizeMode.StretchImage
myCam = New iCam
myCam.initCam(Me.picOutput.Handle.ToInt32)'Livebild wird übertragen
End Sub

Private Sub cmdViewStill_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdViewStill.Click
If myCam.iRunning Then
Dim a As FrmImage
a = New FrmImage

a.picImage.Image = myCam.copyFrame(Me.picOutput, New RectangleF(0, 0, _
Me.picOutput.Width, Me.picOutput.Height))
Me.Show()
Else
MessageBox.Show("Camera Is Not Running!")
End If
End Sub

Wenn ich das Bild speichern möchte:

Private Sub Speichern()
Me.Show()
Dim myCam As New iCam
Dim i As Integer = 0
Dim dateinamenszusatz As String
Dim bmp As Bitmap
dateinamenszusatz = i.ToString
bmp = CType(picImage.Image, Bitmap)
bmp.Save("C:\MiniCam_Bilder\Bild" + dateinamenszusatz + ".bmp")
i = i + 1
Me.Close()
End Sub

funktioniert das auch, aber nur solange ich einen Button klicke, welcher danach die Funktion Speichern() aufruft.
Wenn ich den Button per Software klicken lasse, läd das Programm nicht mehr das Bild in die PictureBox, sondern
den dahinterliegenden Ausschnitt des Desktops. In die Datei wird also ein Teil meines Bildschirms gespeichert.
Wenn ich statt des Buttons einfach nur eine Funktion programmiere welche ohne den Button anfängt Bilder zu speichern
entsteht wieder das Resultat mit dem Bildschirmhintergrund.
Ich versuche nun das Bild direkt in ein Bitmap zu speichern, ohne es zuvor in die PictureBox zu laden.
So könnte ich vermeiden, dass in der PictureBox der Bildschirmhintergrund landet.
Also:
Wenn mir jemand einen Code zeigen kann welcher die 2 Zeilen:

a.picImage.Image = myCam.copyFrame(Me.picOutput, New RectangleF(0, 0, _
Me.picOutput.Width, Me.picOutput.Height))

ersetzt durch Zeilen welche direkt das Bild in ein Bitmap speichert wie z.B.

Dim bmp as Bitmap
bmp = myCam.copyFrame(Me.picOutput, New RectangleF(0, 0, _ 'diese 2 Zeilen hier funktionieren natürlich nicht
Me.picOutput.Width, Me.picOutput.Height)) 'sonst wäre das Problem gelöst

wäre ich sehr dankbar.

Ich verwende WinXP
VisualBasic Express

PS: Da mir Dr.Soong mitteilte, dass VB Express zu .NET gehört, habe ich den Beitrag nochmal erstellt.
 

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.832
Neuestes Mitglied
SirrDansen