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



BeitragVerfasst: Mo 06.12.10 16:44 
Hallo.
Ich habe folgendes Problem:
Ich bekomme von einer Kamera Bilder (4 Stück / s). Diese Bilder werden von der Kamera in einem Speicherbereich (m_MemAddr) abgelegt.
Mit folgendem Befehl kann ich das aktuelle Bild in ein Bitmap einlesen:

ausblenden C#-Quelltext
1:
2:
Bitmap Bild;
Bild = new Bitmap(iBreite, iHoehe, iPitch, System.Drawing.Imaging.PixelFormat.Format32bppRgb, (IntPtr)this.m_MemAddr);


Danach übergebe ich dieses Bitmap einer PictureBox, damit dieses Angezeigt wird.

ausblenden C#-Quelltext
1:
PictureBox1.Image = Bild;					


Nun habe ich ein Standbild in der PictureBox1, während die Kamera weiter Bilder liefert.

Die PictureBox1 ist so eingestellt, dass sie sich der Größe des Formulars mit verstellt (also neu zeichnet).
Sobald ich die Größe des Formulars ändere, zeichnet sich die PictureBox1 neu und übernimmt nicht das alte Standbild, sondern ein neues von der Kamera.

1) Wieso geschieht das?
2) Wie kann ich das verhindern?


Danke schon mal für die Hilfe

Gruß
Rasmus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.12.10 16:49 
Ich kenne das jetzt nicht, aber du übergibst die Bitmap, die auf dem Speicherbereich basiert, an die PictureBox, dementsprechend holt die vermutlich auch von dort das Bild.

Wenn du das nicht möchtest, musst du den Inhalt vermutlich vorher kopieren.
Rassi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mo 06.12.10 17:03 
Hallo.
Danke für die Antwort.
Ich denke auch, dass das alles aufeinander zeigt.
Doch wie kopiere ich das so, dass es nicht mehr passiert?


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



BeitragVerfasst: Mo 06.12.10 17:13 
Hallo.
Wie immer ganz einfach, danke nochmal für den Tip.
Es war genau so, dass noch mal eine Kopie vom Bitmap erstellt werden muss.

ausblenden C#-Quelltext
1:
2:
Bitmap Bild2 = new Bitmap(iBreite, iHoehe, iPitch, System.Drawing.Imaging.PixelFormat.Format32bppRgb, (IntPtr)this.m_MemAddr);
Bitmap Bild = new Bitmap(Bild2);


Nun ist in Bild das gewünschte Standbild, was nicht mehr von der Speicheradresse abhängig ist.


Gruß
Rasmus
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 06.12.10 17:15 
Probiere mal Bitmap.Clone() aus und das daraus erzeugte Bild weist du dann der PictureBox zu:
ausblenden C#-Quelltext
1:
2:
3:
Bitmap bmp = new Bitmap(iBreite, iHoehe, iPitch, System.Drawing.Imaging.PixelFormat.Format32bppRgb, (IntPtr)this.m_MemAddr);

pictureBox1.Image = Bitmap.Clone(bmp);