Avatar billede kagejoe Nybegynder
15. oktober 2010 - 11:32 Der er 6 kommentarer og
1 løsning

Trig kamera hvert andet sec

Hej

Jeg sidder og roder lidt med et usb kamera jeg gerne vil have til at tage et billed hvert andet sec. Jeg har kommunikationen til kameraet til at virke og jeg kan tage billeder og gemme. Mine VB færdigheder rækker dog ikke til at lure hvordan denne timer del skal laves.

Jeg havde tænkt at der skal køre en tid (gerne i millisec så der kan justeres lidt) også trigge kameraet ved 2s, 4s, 6s osv. Så den tid kameraet er om at tage billedet og gemme ikke forstyrre trigger tiderne.

Mvh ChristofferG
Avatar billede finb Ekspert
15. oktober 2010 - 11:51 #1
Skriver kun for at aktivere "overvåg denne tråd", håber nogen kan svare...
Avatar billede mrgumble Nybegynder
15. oktober 2010 - 12:08 #2
Nu er jeg lidt fræk, men har du prøvet Google?
http://www.google.dk/search?q=vb.net+timer (Antager at det er VB.net).
Avatar billede kagejoe Nybegynder
15. oktober 2010 - 12:16 #3
Bare rolig er skam i gang med diverse eksempler fra min ven google, men intet syntes lykkes.
Avatar billede mrgumble Nybegynder
15. oktober 2010 - 12:24 #4
Så må du jo spørge om det i stedet. Hvad virker ikke? Hvorfor virker det ikke? Hvordan kan du se, det ikke virker?
Avatar billede kagejoe Nybegynder
15. oktober 2010 - 13:03 #5
Jeg har forsøgt mig med GetTickCount API.

Private Declare Function GetTickCount Lib "kernel32" () As Long


Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command3.Click
        Dim d, e As Long
        If v.Preview Then
            d = 0    'Bruges til filnavnet
            e = 22  'Antal billeder
            ImgDelay = 2000 'Tid mellem billeder (ms)
            ImgStart = GetTickCount()
            While e > 0
                If GetTickCount() = e * ImgDelay + ImgStart Then
                    e -= 1
                    d += 1
//-
noget kode for at tage billedet
-//
                    Form2.BackgroundImage.Save("c:/Pic" & d & ".bmp")
                End If
            End While
        End If
    End Sub

Tror måske det er "If GetTrickCount()= e * ImgDelay + ImgStart" der går galt fordi de ikke er samme type?
Avatar billede mrgumble Nybegynder
15. oktober 2010 - 13:45 #6
Første pointe: Bryd din kode op i mindre dele. F.eks. funktionen til at tage et billede; læg den ind i en separat funktion, der tager en sti som argument. Funktionen er derefter kun ansvarlig for at tage billedet og gemme det. Funktionen kan eventuelt returnere sand eller falsk, alt efter om det lykkedes. En videreudvikling kunne så være, at funktionen returnerer selve billedet og så have en ny funktion der gemmer det. I ca. VB ville det laves som:
Public Sub knipsBilledeOgGemDet(ByVal strFilnavn as String)
  ' noget kode for at tage billedet og indsætte det som baggrund i form2
  Form2.BackgroundImage.Save(strFilnavn)
End Sub

Nu kan jeg ikke VB.Net, så du kan ikke bruge min kode ren.

Derefter ville jeg læse det første hit fra Google-søgningen og se, at man kan placere en Timer-control på formularen. Denne indstilles til 2000 ms og disables (sæt "Enabled" = False). Dobbelt klik timeren for at få dens event. Her indsætter du:
If iAntalKnips = iMaxAntalBilleder Then
  timer.enabled = False
  Exit Sub
End if
Call knipsBilledeOgGemDet("c:/Pic" & iAntalKnips & ".bmp")
iAntalKnips = iAntalKnips + 1


Din command3_click event sætter du til:

If v.Preview Then
  If timer.enabled = False Then
    iAntalKnips = 0
    iMaxAntalBilleder = 59993
    timer.enabled = True
  Else
    timer.enabled = False ' Stopper timeren hvis den var i gang.
  End If
End If


Og så tænker du: "iAntalKnips? iMaxAntalBilleder? Dem har jeg ikke defineret?" Nej, dem definerer du globalt, dvs. i toppen af Form2's kode og udenfor funktioner og subs. Det gør at alle funktionerne har adgang til dem og de forbliver defineret selv efter en funktion er færdig.

Problemet i din kode er, at du kører en While-løkke mens du venter. Sådan en æder ressourcer, uden egentligt at bruge dem, udover hvert andet sekund. En Timer bruger ikke CPU-kræfter på at venter på sin tur, men har en smart bagvedliggende måde at bestemme, at nu er det ved at være tid.
Avatar billede kagejoe Nybegynder
15. oktober 2010 - 13:48 #7
Fandt et eksempel på GetTickCount API her:
http://www.vbforums.com/showthread.php?t=231183
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester