Webcam

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Appart

Betreff: Webcam

BeitragDi, Jul 07, 2009 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Ich versuche eine art eyetoy in bb zu coden. Jedoch ist mein momentaniges Programm zu langsam. Könnte vlt. jemand der sich mit banks auskennt mir helfen ?? Hier ist mein source:

Code: [AUSKLAPPEN]


capwindowx   =  1; 1  use
capwindowy   =  1; 1        this
capwindoww   = 1; 1               to
capwindowh   =1 ; 1                     make a small previewwindow at 1,1 with 1*1 pixels (invisible ;) )
previewrate  = 9   ;               play here to get better fps from driver           


PokeInt inbank,0,  capwindowx
PokeInt inbank,4,  capwindowy
PokeInt inbank,8,  capwindoww
PokeInt inbank,12, capwindowh
PokeInt inbank,16, previewrate
PokeInt inbank ,24,FakeBank+4

CallDLL("METHYL","SETDATA",inbank,outbank)   ;
CallDLL ("METHYL","START")
CallDLL("METHYL","SETFORMAT")      ; call videoformat       
CallDLL ("METHYL","SETSOURCE")    ;call videosource
CallDLL  ("METHYL","SETPREVIEWON")
CallDLL ("METHYL","SETPREVIEWOFF")



img=CreateImage(1,1)  ;<- fakeimage To get the driversettings
buffer1 =CreateBank((ImageWidth (img)*ImageHeight (img)*4))

ok = CallDLL ("METHYL","GETCLIP",inbank,buffer1)

driverimagew = PeekInt ( inbank,0)
driverimageh = PeekInt (inbank,4 )
driverdepth   = PeekInt  (inbank,8) 

FreeImage img
FreeBank buffer1
img=CreateImage(driverimagew,driverimageh)
Global buffer =CreateBank((ImageWidth (img)*ImageHeight (img)*4))
Global showbuffer =CreateBank(driverimagew*driverimageh*4)
ok = CallDLL ("METHYL","GETCLIP",inbank,buffer)
ok = CallDLL ("METHYL","CONTFRAME")   ;<- start capturing
CallDLL ("METHYL","SETPREVIEWON")




pos = LoadImage("pos.bmp")
Dim ex(10000)
Dim ey(10000)







Repeat
Cls




SetBuffer ImageBuffer(img)
LockBuffer ImageBuffer(img)
pointer =0
ok = CallDLL ("METHYL","STOPPFRAME")   ; <- stopp preview  !
For y = 0 To  ImageHeight (img)-1 
For x = 0 To  ImageWidth  (img)-1
rgb = PeekInt (buffer,pointer)
WritePixelFast(x,y,rgb)
pointer =pointer + 4
Next
Next



UnlockBuffer ImageBuffer(img)
ok = CallDLL ("METHYL","CONTFRAME")   ; continue capturing
SetBuffer BackBuffer()




DrawImage img ,0,0
SaveImage img, "neu.bmp"
img1 = LoadImage("old.bmp")
SaveImage img, "old.bmp"
img2 = LoadImage("neu.bmp")

 
i = 0
DrawImage img ,0,0



For y = 0 To  ImageHeight (img1)-1  Step 6
For x = 0 To  ImageWidth  (img1)-1  Step 6

SetBuffer ImageBuffer(img1)
LockBuffer ImageBuffer(img1)


rgb=ReadPixelFast(x,y)
r=(rgb And $FF0000)/$10000
g=(rgb And $FF00)/$100
b=rgb And $FF
bl1 = r+g+b


SetBuffer ImageBuffer(img2)
LockBuffer ImageBuffer(img2)



rgb=ReadPixelFast(x,y)
r=(rgb And $FF0000)/$10000
g=(rgb And $FF00)/$100
b=rgb And $FF
bl2 = r+g+b


If bl2 - bl1 < -250
i = i+1
ex(i) =x
ey(i) =y

EndIf

If bl2 - bl1 > 250
i = i+1
ex(i) =x
ey(i) =y
EndIf

Next
Next



SetBuffer BackBuffer()
For abz = 0 To i
DrawImage pos,ex(abz),ey(abz)
Next
Flip







FreeImage(img1)
FreeImage(img2)




Until KeyHit(1)


ok = CallDLL("METHYL","ENDCAP")  ; <- Stop capture  unload dll
End


Und die METHYL.dll [url]http://uploaded.to/file/bur3eu[/url]

MFG Appart

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jul 07, 2009 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kenne mich mit Banken aus, aber trotzdem habe ich keine Lust mir das Schlamassel anzutun. Der Code ist in erster Linie nicht eingerückt. Das solltest du dir wirklich als aller erstes angewöhnen. Wenn du keine Lust hast selber auf Tab zu drücken, installier dir eine gescheite IDE. Da würde ich dir IDEal empfehlen. Die Standard-IDE von Blitz ist Mist.

Denoch will ich mal ein paar Tipps geben:

- Alle Werte aus irgendwelchen Funktion die du in einer Schleife benötigts, speichere sie in eine Variable. Also statt ewig das Handle von ImageBuffer(Img) und ähnliches auszulesen, speichere es einmal vorher ab und setze diese dann ein.

- Write/ReadPixelFast ist wirklich sehr viel schneller als das ohne Fast, aber das nützt dir wenig, wenn du für jeden Pixel extra den Puffer sperrst und ihn anschliessend wieder entsperrst. Mach das ausserhalb einer Schleife.

|

Ansonsten wird es schwirig über Blitz ein schnelles Eyetool zu programmieren, da dafür schon ein wenig mehr gehört, als ein paar Zeilen Code. Blitz ist auch für solche Sachen nicht ausgelegt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group