Vor Livestream Zeichnen



  • Hallo,

    ich habe ein MFC-Projekt mit VS2010.

    Ich bilde auf einem Fenster einen Livestream von der Webcam ab.
    Da der User einen Bereich auswählen kann möchte ich einen Rahmen vor dem Livestream zeichnen.
    Der Livestream verdeckt/überschreibt jedoch immer den Rahmen.
    Gibt es da eine möglichkeit, dass der Rahmen vor dem Livestream bleibt?
    z.B. einen unsichtbaren Layer



  • Na was mir mal schnell einfällt ist ein transparentes Window zu benutzen, oder die bilddaten vom treiber abholen den rahmen einzeichnen und dann selbst in den Zielbereich blitten



  • Ja sowas wie mit nem Transparenten Fenster hab ich mir vorgestellt. Ich hab nur keine Ahnung, wie ich das anstellen soll.
    Das muss sich ja auch mitverschieben wenn ich das Dialogfenster verschiebe.

    Einzeichnen ist keine Alternative, da im Hintergrund die Bilder verarbeitet werden.



  • wieso musst du das mitverschieben wenn sich das Window verschiebt? Deine einzelnen Static oder Button verschiebst du doch auch nicht einzeln wenn sich das Window verschiebt oder? Du kannst doch am einfachsten ein CStatic nehmen, welches als Parent dein window hat und auf der Position des Bildes liegt, da du selbst das CStatic zeichnest, also ne eigene Klasse von CStatic ableitest und die OnPaint überlädst, brauchst du dir doch nur Gedanken drum zu machen wie du bei verschiebung deiner Markierung die alte weg bekommst, also vom Grundprinzip is das net schwer nur die Zeichnerei haste an der Backe


  • Mod

    Hmmm. Transparentes Fenster gut und schön, aber hier wird es nur mit einem layered Window gehen. Ein Child Window, das man drüber legt wird sicherlich überzeichnet durch die Videoausgabe.
    Layered Windows müssen aber Top-Level sein.

    Aber auch die kann man synchron verschieben.



  • Wie erzeuge ich denn ein Top Layered Window? Ich hab mir das bei MSDN durchgelesen, werd daraus aber nicht schlau.



  • Kann mir jemand weiterhelfen, wie ich das realisieren kann?

    Wie erstelle ich denn einen layer über mein Dialogfenster?


  • Mod

    pumple schrieb:

    Wie erzeuge ich denn ein Top Layered Window? Ich hab mir das bei MSDN durchgelesen, werd daraus aber nicht schlau.

    Woraus wirst Du nicht schlau?
    In der MSDN ist einkomplettes Beispiel in der Abschnitt mit den allgemeinen Erklärungen:
    http://msdn.microsoft.com/en-us/library/ms997507.aspx



  • ja da steht wie ich ein Layer durchsichtig mache.

    Ich will einen erstellen und dann darauf was zeichnen. Der Layer soll dann wenn ich das Fenster verschiebe auch mitverschoben werden.

    Muss ich ein neues Dialogfenster erstellen oder wie?

    Außerdem erwartet die "setLayerdWindowAttributes" erwartet VS 2010 kein hwnd sondern nur:

    COLORREF crKey, BYTE bAlpha, DWord dwFlag



  • ich konnte das Hauptfenster damit durchsichtig machen.

    Aber ich will ja ein Fenster Drüber legen, das durchsichtig machen und dann darauf zeichen.

    Benutze ich aber das Fenster Handle auf das Animate Control Fenster, wo der Livestream reingezeichnet wird, wird das nicht durchsichtig. Gleiches gilt für buttons...



  • Wenn ein Video mit irgendwas überlagert werden soll (Bitmap, Text, anderes
    Video, ..) wäre eventuell der "DirectShow Video Mixing Renderer 9" (VMR9)
    eine Möglichkeit. Hier kann man bis zu 4 Eingänge zusammenmixen ohne selbst
    was zeichnen zu müssen.

    http://msdn.microsoft.com/en-us/library/dd407294(v=vs.85).aspx


Log in to reply