Bild aus Picturebox speichern!

Hallo, ich habe ein schwerwiegendes Problem.
Ich habe ein Programm geschrieben,mit welchem ich objekte in einer kiste separiere. ich zeichne dann ein binärbild(blau/weiß). ich möchte nun dieses binärbild speichern. Jedoch speichert er immer nur das originalbild.

ich lade ein bild in die picturebox1 und dort wird auch das bild ausgewertet. es entsteht irgendwie kein neues bild, sondern lediglich eine art „maske“, die beim bewegen der maus wieder verschwindet.

wie schaffe ich es, dieses bild als ein neues bild zu speichern.

Kann mir da jemand helfen, ich würde euch mal das projekt schicken, damit ihr mein problem besser versteht.

ich weiß wirklich nicht weiter!

Vielen Dank
Christian Krummrich

Hallo!
Ohne eine einzige Zeile Code kann man Dir nur äußerst schwer helfen.
Nach der Beschreibung könnte es aber sein, dass Du einen recht typischen Anfängerfehler machst: Direktes Zeichnen irgendwohin, außerhalb des OnPaint-Handlers. Das Ergebnis solcher Zeichenaktionen ist immer in dem Moment wieder verloren, wo das zugrunde liegende Control sich selbst neu zeichnet, z.B. beim Verschieben.

Um in ein neues Bild zu malen, musst Du grob sowas schreiben (aus dem Gedächtnis, kein Anspruch auf Vollständigkeit/Fehlerfreiheit!):

Bitmap bmp = new Bitmap(200,100);
using (Graphics g = Graphics.FromBitmap(bmp))
{
 g.FillRectangle(Brushes.Red, 10, 10, 100, 50);
}
pictureBox1.Image = bmp;

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Martin,

ich habe inzwischen das Projekt, verstehe aber .NET noch nicht.
Ich habe das Projekt in VB6 nachgebaut, da ist das nicht viel, aber schnell. Kannst Du das nach VB.NET umschreiben?

Gruß Rainer

Option Explicit

Private Type BITMAP
 bmType As Long
 bmWidth As Long
 bmHeight As Long
 bmWidthBytes As Long
 bmPlanes As Integer
 bmBitsPixel As Integer
 bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim PicBits() As Byte, PicInfo As BITMAP
Dim Cnt As Long, BytesPerLine As Long

Private Sub Command2\_Click()
 Dim tm As Long
 tm = Timer
 GetObject Picture1.Image, Len(PicInfo), PicInfo
 BytesPerLine = (PicInfo.bmWidth \* 3 + 3) And &HFFFFFFFC
 ReDim PicBits(1 To BytesPerLine \* PicInfo.bmHeight \* 3) As Byte
 GetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)

 'Auswertung
 For Cnt = 1 To UBound(PicBits) Step 4
 If PicBits(Cnt) \> 100 Then
 PicBits(Cnt) = 255
 PicBits(Cnt + 1) = 255
 PicBits(Cnt + 2) = 255
 End If
 Next Cnt

 SetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
 Picture1.Refresh
 Me.Caption = Round(Timer - tm, 2)
End Sub

Private Sub Command1\_Click()
 CommonDialog1.ShowOpen
 Picture1.Picture = LoadPicture(CommonDialog1.FileName)
End Sub


Private Sub Command3\_Click()
 CommonDialog1.ShowSave
 SavePicture Picture1.Image, CommonDialog1.FileName
End Sub

Private Sub Form\_Load()
 Picture1.AutoSize = True
 Picture1.AutoRedraw = True
 Command1.Caption = "laden"
 Command2.Caption = "bearbeiten"
 Command3.Caption = "sichern"
End Sub

Hi!
Sorry, aber einerseits habe ich nicht den Nerv/die Zeit, jemand anderes Projekte zu übersetzen und andererseits ist der Lerneffekt für alle Beteiligten dabei nicht wirklich gegeben.
Soweit ich dem Code entnehmen konnte, soll wohl ein Schwellwertfilter für den Rotanteil dabei rauskommen, aber was genau mit den Pixeln passiert ist letztlich für das grundsätzliche Verständnis zweitrangig.
Unter http://www.codeproject.com/info/search.aspx?artkw=im…
findet man eine ausgezeichnete Serie von Artikeln von Christian Graus zum Thema „Image Processing mit .NET“.
Gleich der erste Artikel (http://www.codeproject.com/KB/GDI-plus/csharpgraphic…) zeigt gut, wie solche Filter erstellt werden - sehr empfehlenswert.

Gruß,
Martin