Seite 1 von 1

Wie geht DrawingBuffer() mit Sprites zusammen?

Verfasst: 05.04.2006 09:44
von Xaby
Benötige Hilfe bei einer VideoAnalyse. Wollte sowas machen wie EyeToy oder so. Hab aber keine Ahnung, wie ich das eine WebCam-Beispiel aus dem Forum so einbinden kann, dass ich irgendwie auf das Bild zugreifen kann und da meine Berechnungen machen kann.

Kann mir vielleicht jemand sagen, wie ich Pixel-Analyse machen kann, wie es schnell funktioniert. Vielleicht ein Beispiel für Kantenfinden oder so.

Würd auch gern wissen, wie ich als Quelle dann DV-IEEE1394 über WDM und auch Videos an sich nutzen kann.

Wollte sowas machen, dass ich das DV-Signal auf 16:9 strecke bei einem 16:10 Notebook. Das macht NeroVision nämlich so nicht.

Brauch das auch noch für andere Dinge. Würd mich über eure Hilfe freuen

Verfasst: 05.04.2006 11:10
von winduff
auf purearea.net gibt es eine dll, "iCamPlay" heisst die... schau die dir mal an, vllt. hilft sie dir weiter ;-)

Die kenn ich, aber würdest du mir bitte auch genau

Verfasst: 05.04.2006 11:20
von Xaby
beschreiben, wie ich sie für meinen Zweck einbinden muss?

Ich bin mit dem Ding nämlich nicht klar gekommen.

Kann mir jemand einen Tipp geben

Verfasst: 07.04.2006 09:31
von Xaby
:allright: Wie ich am unkompliziertesten aus Linien und Punkten, Kreise und Rechtecke bzw. Linien machen kann?

Ich dachte daran, dass ich erst einmal es mit Bildern versuche.

Da die Kanten finde, dann oberhalb und unterhalb einer möglichen Linie zwei eigene zeichne. Und wenn dazwischen eine bestimmte Anzahl von Punkten vorkommt, könnte das eine Linie sein.

Es geht darum, z.B. eine Zeichnung freihand von einem Blatt in GeometrischeFormen zu wandeln.

Aus einem Vieleck, vielleicht einen Kreis, weil es eigentlich einer werden sollte. Vielleicht geht das auch einfacher, wenn man es irgendwie über Mausgestiken versucht.

Hat jemand eine Ahnung, ob es schon Code in Pure für etwas ähnliches gibt?

Und mit welchen Befehlen kann ich folgenden Code benutzen für mein Vorhaben?

Code: Alles auswählen

#WM_CAP_START = #WM_USER 

#WM_CAP_SET_CALLBACK_ERROR = #WM_CAP_START + 2 
#WM_CAP_SET_CALLBACK_STATUS = #WM_CAP_START + 3 
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4 
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5 
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6 
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7 

#WM_CAP_DRIVER_CONNECT        =  #WM_USER + 10 
#WM_CAP_DRIVER_DISCONNECT     =  #WM_USER + 11 
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14 

#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41 
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42 
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43 

#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50 
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52 
#WM_CAP_GET_STATUS = #WM_CAP_START + 54 

#WM_CAP_FILE_SAVEDIB          =  #WM_USER + 25 
#WM_CAP_SET_SCALE             =  #WM_USER + 53 

#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85 

Structure VIDEOHDR 
  lpData.l 
  dwBufferLength.l 
  dwBytesUsed.l 
  dwTimeCaptured.l 
  dwUser.l 
  dwFlags.l 
  dwReserved.l[3] 
EndStructure 

Structure CAPSTATUS 
  uiImageWidth.l 
  uiImageHeight.l 
  fLiveWindow.l 
  fOverlayWindow.l 
  fScale.l 
  ptScroll.POINT 
  fUsingDefaultPalette.l 
  fAudioHardware.l 
  fCapFileExists.l 
  dwCurrentVideoFrame.l 
  dwCurrentVideoFramesDropped.l 
  dwCurrentWaveSamples.l 
  dwCurrentTimeElapsedMS.l 
  hPalCurrent.l 
  fCapturingNow.l 
  dwReturn.l 
  wNumVideoAllocated.l 
  wNumAudioAllocated.l 
EndStructure 

hWnd = OpenWindow(0, 0, 0, 400, 400, #PB_Window_SystemMenu, "WebCamTest") 

CreateGadgetList(WindowID()) 

If OpenLibrary(0, "AVICAP32.DLL") 
  
  hWebcam = CallFunction(0, "capCreateCaptureWindowA", "BLUBBER", #WS_VISIBLE + #WS_CHILD, 10, 10, 380, 380, hWnd, 0) 
  
SendMessage_(hWebcam, #WM_CAP_DRIVER_CONNECT          , 0 , 0) ;<- da halt auf den entsprechenden treiber(0-9) ändern 
SendMessage_(hWebcam, #WM_CAP_SET_SCALE               , 1 , 0) 
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEWRATE         , 50, 0) 
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW             , 1 , 0) 

Repeat 
  Event = WindowEvent() 
  Select Event 
    Case #PB_Event_CloseWindow 
      Quit = 1 
  EndSelect 
Until Quit = 1 
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW       , 0, 0) 
SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, "BLUBBER", 0) 
CloseWindow(0) 
CloseLibrary(0) 
EndIf 
End
Ich sehe zwar das Bild, aber wie kann ich z.B. auf den DV-Eingang meines Rechners wechseln oder wenigstens ein Bild von der WebCam speichern bzw. eine Analyse drauf anfangen?

Bitte... :shock:

Verfasst: 07.04.2006 20:22
von Falko

Verfasst: 11.04.2006 14:37
von Xaby
http://www.purebasic.fr/german/viewtopi ... ht=capture

Super, so fast :o

:freak:

Kann mir ein Beispiel mit DrawingBuffer() und einer PixelOperation geben?

Ach und noch was!:

Code: Alles auswählen

 If Event = #PB_EventGadget 
    
    If GadgetID = #Button_0 
      Link = GetClipboardData(#PB_ClipboardImage) 
      
      
      If Link <> 0        
       
       Debug IsImage(Link)
       Debug Link
Auszug aus dem oberen Code, wo der Link ist.
Wieso habe ich kein Image, ich kann zwar DrawImage() benutzen, aber keine anderen Befehle.
Also das Rechte ist es wohl noch nicht mit

Code: Alles auswählen

 Link = GetClipboardData(#PB_ClipboardImage)
Das liefert kein sauberes Image zurück.

/:-> Wie kann ich also mein Bild manipulieren?

Verfasst: 12.04.2006 10:48
von Xaby
Ich hab einen Ansatz.

:shock: Ich hab's geschafft. Da ja wenigstens DrawImage() ging.
Hab ich Link auf ein neues Sprite gezeichnet mit DrawImage() und StartDrawing(SpriteOutput(MeinSprite))

...

Also darstellen und Speichern und drehen ist möglich auch 2D-Pixelmanipulation. Mit Plot und Pixel /:->

Aber die sind so lam. Bitte helft mir mal und sagt mir, wie es mit den Buffern geht.

Danke :roll: