Graphik in den Vordergrund



  • Hallo Leute,

    ich habe in eine bestehende Kamera Applikation ein einfaches Kreuz rein geschrieben.
    Habe das Problem das mein Kreuz leider von dem Kamera-bild in den Hintergrund geschoben wird.

    Kann mir wer einen Tipp geben wie ich es hin bekomme das das Kreuz immer im Vordergrund bleibt?

    void CIdsSimpleLiveDlg::OnPaint() 
    {
    	{
       PAINTSTRUCT ps;
       CDC* pDC = BeginPaint(&ps);
    
            CPen *pCOrgPen;
            CPen CRedPen(PS_SOLID,2,RGB(255,0,0));
            CPen CBluePen(PS_DASHDOT,1,RGB(0,0,255));
    
            // Grafikcursor auf Ausgangsposition setzen
            pDC->MoveTo(1000,200);
            // Roten Stift fuer erste Linie auswaehlen
            pCOrgPen = pDC->SelectObject(&CRedPen);
            // Erste Linie zeichnen
            pDC->LineTo(10,200);
            // Strichpunktierten Stift fuer zweite Linie auswaehlen
    		pDC->MoveTo(300,10);
            pDC->SelectObject(&CRedPen);
            // Hintergrund des strichpunktierten Stifts auf gruen setzen
           // pDC->SetBkMode(OPAQUE);
           // pDC->SetBkColor(RGB(0,255,0));
            // Zweite Linie zeichnen
            pDC->LineTo(300,498);
            // Original-Stift wieder auswaehlen
            pDC->SelectObject(pCOrgPen);
            // Hier werden die beiden Stifte wieder geloescht!!
    
       EndPaint(&ps);
    
       // Do not call CView::OnPaint() for painting messages
    
    }
    

    Ich habe es bereits mit BringToFront versucht, allerdings bekomme ich da den Fehler das BringToFront nicht in CDC vorhanden ist.
    BringToFront dort zu deklarieren habe ich nicht hinbekommen bzw. weiss ich garnicht ob man das so überhaupt machen kann.

    MFG

    Prime



  • Da wird nix in den Hintergrund "geschoben" - offensichtlich wird das Kreuz
    (mit hoher Framerate ?) überschrieben.

    Code der das Kamerabild aufs Fenster zeichnet fehlt hier komplett.

    Ich vermute mal, das es sich um Direct-X Code handelt, der das Lifebild
    direkt ins Fenster zeichnet.

    Da kommt man wohl nicht dazwischen ....

    Entweder Du zeichnest das Lifebild auch selbst - dann kannst Du die Reihenfolge
    selbst bestimmen, oder Du verwendest einen Renderer, der mehrere Layer unterstützt ->VMR ?

    Wie sieht denn der Kameracode genau aus ?

    PS: Das ständige Anlegen (und löschen ?) von Stiften ist nicht sehr performant ...



  • Der punkt an dem das Kamerabild geholt wird:

    BOOL CIdsSimpleLiveDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
        // will only be enabled if in stop mode
        GetDlgItem(IDC_BUTTON_LOAD_PARAMETER)->EnableWindow(FALSE);
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    
    	// get handle to display window
     	m_hWndDisplay = GetDlgItem( IDC_DISPLAY )->m_hWnd;	
    
    	m_pcImageMemory = NULL;
    	m_lMemoryId = 0;
    	m_hCam = 0;
        m_nRenderMode = IS_RENDER_FIT_TO_WINDOW;
        m_nPosX = 0;
        m_nPosY = 0;
        m_nFlipHor = 0;
        m_nFlipVert = 0;
    
    	// open a camera handle
    	OpenCamera();		
    
    	return true;
    }
    

    Mit ->VMR habe ich keine Erfahrungen.
    Werde mal googlen.

    Über weitere Tipps würde ich mich freuen.
    Bin Anfänger 😞

    Danke



  • Der Code nützt leider nichts; was steht unter OpenCamera() ?



  • Sieht nach OpenCV aus ...



  • Hatte ein paar Tage Pause mit dem Thema 🙄

    Muss jetzt wieder ran.

    Was ich raus gefunden hab ist folgendes:

    IDD_IDSSIMPLELIVE_DIALOG DIALOGEX 0, 0, 350, 350
    STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
    EXSTYLE WS_EX_APPWINDOW
    CAPTION "uEyeSimpleLive"
    FONT 8, "MS Sans Serif", 0, 0, 0x1
    BEGIN
        PUSHBUTTON      "&Start",IDC_BUTTON_START,10,310,83,20
        PUSHBUTTON      "S&top",IDC_BUTTON_STOP,110,310,83,20
        PUSHBUTTON      "&Load Parameters",IDC_BUTTON_LOAD_PARAMETER,634,60,83,20
        PUSHBUTTON      "&Exit",IDC_BUTTON_EXIT,634,84,83,20
        CONTROL         "",IDC_DISPLAY,"Static",SS_BLACKFRAME | SS_SUNKEN,0,0,340,300   /// 1263
    END
    
    IDD_ABOUTBOX DIALOGEX 0, 0, 207, 71
    STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "About uEyeSimpleLife"
    FONT 8, "MS Sans Serif", 0, 0, 0x0
    BEGIN
        DEFPUSHBUTTON   "OK",IDOK2,168,50,32,14,WS_GROUP
        LTEXT           PROGRAM_VERSION_TEXT, IDC_STATIC,7,20,120,8,SS_NOPREFIX
        LTEXT           "Copyright © 2004 - ", IDC_STATIC_COPYRIGHT,7,32,120,8
        LTEXT           PROGRAM_COMPANY, IDC_STATIC_ABOUT_COMPANY,7,44,150,8
        LTEXT           PROGRAM_NAME, IDC_STATIC_ABOUT_APPNAME,7,8,120,8
        CONTROL         135,IDC_STATIC,"Static",SS_BITMAP,138,7,62,25
    END
    

    Der Teil mit dem Aufruf:
    CONTROL"",IDC_DISPLAY,"Static",SS_BLACKFRAME | SS_SUNKEN,0,0,340,300
    Ist denke ich das Problem.
    Wenn die Kamera nicht angeschlossen ist und mein Kreuz von SS_BLACKFRAME und SS_SUNKEN überdeckt.

    Bedeutet ich muss meine Grafik nur vor die Funktionen der Resorcen Datei bekommen.

    Hat bitte wer noch einen Tipp für mich?

    MFG

    Prime



  • Prime schrieb:

    Der Teil mit dem Aufruf:
    CONTROL"",IDC_DISPLAY,"Static",SS_BLACKFRAME | SS_SUNKEN,0,0,340,300
    Ist denke ich das Problem.
    Wenn die Kamera nicht angeschlossen ist und mein Kreuz von SS_BLACKFRAME und SS_SUNKEN überdeckt.

    Bedeutet ich muss meine Grafik nur vor die Funktionen der Resorcen Datei bekommen.

    Das static zeichnet m.E. nur einen Rahmen und verdeckt nichts (ungeprüft).

    Vermutlich wird der Hintergraund bei WM_ERASEBKGND gelöscht.
    Versuchsweise könnte man WM_ERASEBKGND mit return ungleich Null implementieren.


Anmelden zum Antworten