tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1393
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    u918244 u918244 ist offline Grünschnabel
    Registriert seit
    Apr 2008
    Beiträge
    4
    Hallo Forum,

    vorsicht, hier kommt eine Anfängerfrage. Vielleicht könnt Ihr mir ja helfen. Ich benutze VB.Net 2008 und habe im Groben vor, ein Programm zu schreiben, das:
    1. in der Form eine PictureBox enthält
    2. in die PictureBox ein Bild lädt (als Hintergrundbild)
    3. auf dieses Bild an Koordinaten, die aus einer Datei eingelesen werden, kleine Quadrate zeichnet
    4. die fertige Grafik abspeichern kann, ohne die Vorlagedatei zu überschreiben.

    Dazu habe ich mein Form erstellt und eine PictureBox (BILD) nebst einem Button eingefügt. Dazu noch einige Textfelder, die nötige Parameter angeben. Diese sind aber hier nicht so wichtig.
    Wenn ich das Programm starte, macht es eigentlich alles so, wie es soll, ich sehe auch kurz meine kleinen Quadrate, aber innerhalb von Sekundenbruchteilen wird das eigentlich im Hintergrund liegende Bild nach oben geholt (oder neu geladen?), so dass ich meine eingezeichneten Objekte nicht mehr sehe.
    Hier der grobe Code:
    PHP-Code:
    Private Sub btn_color_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btn_color.Click
            Dim myGraphics 
    As Graphics
            Dim input 
    As String ""
            
    Dim outputx(5000) As Integer
            Dim outputy
    (5000) As Integer
            Dim outputz
    (5000) As Single
            Dim lowestdata 
    As Single 10000
            Dim highestdata 
    As Single = -10000
            Dim i 
    As Integer 0
            Dim FStream 
    As New FileStream(openfile(), FileMode.OpenFileAccess.Read)
            
    Dim sreader As New StreamReader(FStream)
            
    Dim maxx As Integer
            Dim maxy 
    As Integer

            myGraphics 
    Graphics.FromHwnd(BILD.Handle)

            
    BILD.Load(txt_template.Text)

            
    maxx txt_diesx.Text
            maxy 
    txt_diesy.Text

            
    Do Until sreader.Peek = -1
                input 
    sreader.ReadLine
                outputx
    (i) = Val(stringseparate(input)(0))
                
    outputy(i) = Val(stringseparate(input)(1))
                
    outputz(i) = stringseparate(input)(2)
                
    += 1
            Loop

            drawskala
    (lowestdatahighestdata)

            For 
    0 To (1)
                
    drawdie(outputx(j), outputy(j), maxxmaxywert2rgb(outputz(j))(0), wert2rgb(outputz(j))(1), wert2rgb(outputz(j))(2))
            
    Next
            BILD
    .Refresh()
        
    End Sub 
    mit maxx und maxy übergebe ich die maximale Anzahl der Positionen für meine Quadrate in X- und Y-Richtung. Damit wird dann die Größe der Quadrate errechnet, um damit die PictureBox-Fläche füllen zu können.

    wert2rgb ist eine Funktion, die mir einfach ein Array mit den RGB-Werten zu meinem Messwert erzeugt. -> funktioniert auch

    drawdie ist die Funktion, die meine kleinen Quadrate zeichnet:
    PHP-Code:
    Sub drawdie(ByVal xcoord As IntegerByVal ycoord As IntegerByVal numx As IntegerByVal numy As IntegerByVal r As IntegerByVal g As IntegerByVal b As Integer)
            
    Dim intographics As Graphics
            Dim waferxdim
    waferydimabstand As Integer
            Dim hoehe
    breitestartxstarty As Single
            intographics 
    Graphics.FromHwnd(BILD.Handle)
            
    waferxdim 400
            waferydim 
    400
            abstand 
    1
            breite 
    = (waferxdim - (numx 1) * abstand) / numx
            hoehe 
    = (waferydim - (numy 1) * abstand) / numy
            startx 
    System.Math.Round(abstand + (xcoord * (abstand breite)))
            
    starty System.Math.Round((numy ycoord) * (abstand hoehe))
            
    intoGraphics.FillRectangle(New SolidBrush(Color.FromArgb(rgb)), startxstartybreitehoehe)
            
    intoGraphics.DrawRectangle(New Pen(Color.FromArgb(000)), startxstartybreitehoehe)
        
    End Sub 
    drawskala zeichnet eine Farbskala in eine andere PictureBox, klappt auch.


    Könnt Ihr mir bei diesem Problem helfen?
    Wahrscheinlich ist es programmiertechnisch total daneben, was ich hier gemacht habe, ich weiß es aber leider nicht besser.

    Gruß,
    Heiko
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    intographics.Flush();
    nach dem du deine zeichnen Methoden aufgerufen hast.

    http://msdn2.microsoft.com/en-us/lib...sh(VS.71).aspx

    Was ist BILD für ein Objekt?
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    u918244 u918244 ist offline Grünschnabel
    Registriert seit
    Apr 2008
    Beiträge
    4
    Danke schonmal für die Antwort. Ich werde es gleich mal probieren.
    BILD ist wie angegeben eine PictureBox.

    Gruß,
    Heiko
     

  4. #4
    u918244 u918244 ist offline Grünschnabel
    Registriert seit
    Apr 2008
    Beiträge
    4
    Hallo Forum,

    leider verhält sich das Programm wie vorher:
    Ich kann, nachdem die Datendatei geladen wurde für Sekundenbruchteile die gezeichneten Rechtecke auf meiner Hintergrundgrafik sehen. Dann sehe ich wie vorher nur die Hintergrunddatei. Auch bei erneutem Aufrufen des Ladevorganges immer das gleiche Verhalten.
    Ich verstehe das irgendwie nicht.
    Wenn mir jemand konkret helfen mag, kann ich ihm auch den Quellcode einmal zumailen, damit die Zusammenhänge klarer werden.

    Gruß,
    Heiko

    EDIT:
    Ich habe mal probiert, die Zeile
    PHP-Code:
    BILD.Load(txt_template.Text
    auszukommentieren. Et voilá: Die Rechtecke werden dargestellt und bleiben auch so. Es muss also etwas mit dem Bild, das eigentlich unter den Punkten liegen soll, zu tun haben. Aber was ?

    PS: Wahrscheinlich habe ich nur wieder irgendetwas nicht begriffen, aber ich sehe da wohl den Wald vor lauter Bäumen nicht...
    Geändert von u918244 (05.05.08 um 09:33 Uhr)
     

  5. #5
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Da musst du wohl mehr von deinem BILD Objekt preisgeben.

    Edit:
    Nur damit verständlich ist.
    Meine Code posten
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  6. #6
    u918244 u918244 ist offline Grünschnabel
    Registriert seit
    Apr 2008
    Beiträge
    4
    Ich weiß nicht, was ich da preisgeben soll. BILD ist einfach eine in die Windows Form gezeichnete PictureBox.
    Die hat doch per se keinen Code, oder?
    Sonst sagt mir bitte, was ich da posten soll.

    Gruß,
    Heiko
     

  7. #7
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Achso
    na dann ist alles klar

    durch
    Code :
    1
    
    BILD.Load(txt_template.Text)
    wird ein neues Image Objekt angelegt

    Code :
    1
    
    myGraphics = Graphics.FromHwnd(BILD.Handle)
    greift glaube auf das Handle des Image (mit) zurück.
    Kann mich hier auch sehr wahrscheinlich irren, bitte korrigiert mich dann.


    Aufjedenfall wenn du die Reihenfolge änderst sollte es funktionieren
    Code :
    1
    2
    
    BILD.Load(txt_template.Text)
    myGraphics = Graphics.FromHwnd(BILD.Handle)

    Edit:
    Und vielleicht sogar besser das Graphics Object über die Image Eigenschaft der PictureBox besorgen
    Code :
    1
    
    myGraphics = Graphics.FromImage(BILD.Image)
    Aber wie gesagt zuerst das Bild laden, dann das Graphics Objekt anfordern.
    Geändert von Spyke (06.05.08 um 18:37 Uhr)
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. IntPtr zu Bitmap in eine PictureBox?
    Von Asterix-Ac im Forum .NET Archiv
    Antworten: 16
    Letzter Beitrag: 21.05.09, 15:09
  2. Inhalt einer Form in eine Picturebox übernehmen
    Von Hogosha im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 25.12.08, 21:03
  3. Kurve in pictureBox zeichnen
    Von MC_Straßenköter im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 15.06.05, 16:34
  4. Anfängerfrage zum Zeichnen
    Von Hypnos im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 12.04.05, 15:59
  5. Antworten: 2
    Letzter Beitrag: 14.05.04, 17:05