Autor Beitrag
Rassi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 19.02.10 15:47 
Hallo.
Das Zeichnen auf eine Picturebox ist ja relativ einfach. Ich habe aber folgendes Problem (Ist wahrscheinlich auch relativ einfach zu lösen).

Ich bekomme von einer Kamera ca. 12 Bilder die Sekunde. Diese Bilder schreibe ich in eine Picturebox:

ausblenden C#-Quelltext
1:
2:
cam.GetImage(m_Image, 0);                                                     // get the image asynchronously
pictureBox1.Image = m_Image;


Nun möchte ich auf diese Picturebox etwas zeichnen (z.B. ein Rechteck). Das mache ich so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
Pen objPen = new Pen(Color.Red);
objPen.Width = 1;

Graphics objG = pictureBox1.CreateGraphics();

objG.DrawRectangle(objPen, 10105050);


Das wird nun gezeichnet und beim nächsten laden eines Image verschwindet das Rechteck wieder.
Wie bekomme ich das Rechteck in den Vordergrund?
Oder kann ich etwas über die pictureBox legen, was transparent ist, worauf ich Zeichnen kann?

Gruß
Rasmus
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 19.02.10 15:56 
Hallo,

bei MSDN steht bezüglich der CreateGraphics-Funktion: Die Graphics ist nur für die Dauer der Meldung im aktuellen Fenster gültig. Wie auch immer... :)

Wüste nicht wie du etwas "permanentes" ohne neu zeichnen bei neuem Bild bekommst.

Das mit einer pictureBox drüber legen funktioniert auf jeden Fall. Einfach als BackColor Transparent wählen und einen BorderStyle wählen ;)

Gruß Daniel
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 19.02.10 16:01 
Hallo.
Danke für die schnelle Antwort.
Das mit der PictureBox drüberlegen habe ich schon versucht.
Transparent als BackColor und sowohl bei Borderstyle None, FixedSingle und Fixed3D habe ich immer die draufgelegte Picturebox als weißen Kasten. Ich bekomme die nicht transparent!

Gruß
Rasmus
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 19.02.10 16:06 
Stimmt, da war noch was.

Du musst der "transparenten" Picturebox die "hintere" Picturebox als parent zuweisen:

ausblenden C#-Quelltext
1:
transparentePB.Parent = pictureBox;					


Gruß Daniel
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 19.02.10 16:14 
Hallo.
Ja dann wird die vordere PictureBox zwar transparent, aber dann wird beim neu Einzeichnen des Images das Rechteck wieder überschrieben.

Gruß
Rasmus
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 19.02.10 16:16 
Das Rechteck zeichnest du nicht mehr, sondern setzt einen Rahmen beim vorderen/transparenten Picturebox... das ist dann das Rechteck.

Ist halt nur auf der Anzeige... aber mehr brauchst du auch nicht oder?
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 19.02.10 16:22 
Ja, für ein Rechteck klappt das, nun aber die Erweiterung (Rechteck hatte ich nur als Beispiel). Was ist bei Kreis, Kreuz usw.?

Gruß Rasmus
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 19.02.10 16:25 
Naja, hast du mal probiert mit einem transparenten Bild in der transparenten Picturebox wo nur ein Kreis drauf ist?

Vom Gefühl her könnte das klappen ;)

Bin dann mal im Wochenende... ciao ciao
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 19.02.10 16:46 
user profile iconRassi hat folgendes geschrieben Zum zitierten Posting springen:
Das wird nun gezeichnet und beim nächsten laden eines Image verschwindet das Rechteck wieder.
Dann zeichne doch einfach nach jedem Laden neu ;) .

_________________
>λ=
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 19.02.10 16:53 
Hallo.
Dann flackert die Anzeige (die gezeichneten Elemente).
Aber da kommt mir eine Idee - kann man das Neuzeichnen eines Objekts nicht solange unterdrücken, bis man es freigibt. Da hatte ich mal was gesehen.
Dann könnte man erst das Image laden, dann Zeichnen, und dann erst das Obgekt aktuallisieren. Dann sollte es eigendlich nicht mehr flackern.

Gruß
Rasmus
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Fr 19.02.10 17:00 
Oh nein.
Ich dachte da an
BeginUpdate

Gibt es aber wohl nur für die TreeView-Objekte.

Schade, Schade.

Weiß jemand, wie man das Neuzeichnen geziehlt steuern kann?

Gruß
Rasmus