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

Ich hoffe Jemand kann mir helfen
 

DrSoong

Iss was, Doc!
Da stellt sich mir mal die generelle Frage, wie du das Bild kriegst. Hast du ein ActiveX-Control oder wie verarbeitest du die Bilddaten allgemein? Oder hast du in der Richtung gar nichts und das ist Teil deiner Frage?


Der Doc!
 

Matt_4

Grünschnabel
Eine Kamera ist über USB an meinen Computer angeschlossen.
In einer PictureBox wird das Live-Bild welches sie liefert ausgegeben, folgendermaßen:

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)
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 Zeile:

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
 

DrSoong

Iss was, Doc!
VB Express ist VB.NET, stell die Frage bitte daher im .NET-Unterforum (oder klingel einen Mod an, dass er den Thread verschiebt). VB hat seit .NET nämlich eine veränderte Syntax, daher ein eigenes Unterforum.


Der Doc!
 

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.832
Neuestes Mitglied
SirrDansen