Wie geht DrawingBuffer() mit Sprites zusammen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Wie geht DrawingBuffer() mit Sprites zusammen?

Beitrag 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
Zuletzt geändert von Xaby am 12.04.2006 10:50, insgesamt 3-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

auf purearea.net gibt es eine dll, "iCamPlay" heisst die... schau die dir mal an, vllt. hilft sie dir weiter ;-)
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

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

Beitrag von Xaby »

beschreiben, wie ich sie für meinen Zweck einbinden muss?

Ich bin mit dem Ding nämlich nicht klar gekommen.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Kann mir jemand einen Tipp geben

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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?
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Antworten