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ängerDanke
-
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.