ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
1393
1393
EMPFEHLEN
-
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:
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.PHP-Code:Private Sub btn_color_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 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.Open, FileAccess.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)
i += 1
Loop
drawskala(lowestdata, highestdata)
For j = 0 To (i - 1)
drawdie(outputx(j), outputy(j), maxx, maxy, wert2rgb(outputz(j))(0), wert2rgb(outputz(j))(1), wert2rgb(outputz(j))(2))
Next
BILD.Refresh()
End Sub
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:
drawskala zeichnet eine Farbskala in eine andere PictureBox, klappt auch.PHP-Code:Sub drawdie(ByVal xcoord As Integer, ByVal ycoord As Integer, ByVal numx As Integer, ByVal numy As Integer, ByVal r As Integer, ByVal g As Integer, ByVal b As Integer)
Dim intographics As Graphics
Dim waferxdim, waferydim, abstand As Integer
Dim hoehe, breite, startx, starty 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 - 1 - ycoord) * (abstand + hoehe))
intoGraphics.FillRectangle(New SolidBrush(Color.FromArgb(r, g, b)), startx, starty, breite, hoehe)
intoGraphics.DrawRectangle(New Pen(Color.FromArgb(0, 0, 0)), startx, starty, breite, hoehe)
End Sub
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
-
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?
-
Danke schonmal für die Antwort. Ich werde es gleich mal probieren.
BILD ist wie angegeben eine PictureBox.
Gruß,
Heiko
-
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 Zeileauszukommentieren. 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 ?PHP-Code:BILD.Load(txt_template.Text)
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)
-
Da musst du wohl mehr von deinem BILD Objekt preisgeben.
Edit:
Nur damit verständlich ist.
Meine Code posten
-
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
-
Achso
na dann ist alles klar
durch
wird ein neues Image Objekt angelegtCode :1
BILD.Load(txt_template.Text)
greift glaube auf das Handle des Image (mit) zurück.Code :1
myGraphics = Graphics.FromHwnd(BILD.Handle)
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
Aber wie gesagt zuerst das Bild laden, dann das Graphics Objekt anfordern.Code :1
myGraphics = Graphics.FromImage(BILD.Image)
Geändert von Spyke (06.05.08 um 18:37 Uhr)
Ähnliche Themen
-
IntPtr zu Bitmap in eine PictureBox?
Von Asterix-Ac im Forum .NET ArchivAntworten: 16Letzter Beitrag: 21.05.09, 15:09 -
Inhalt einer Form in eine Picturebox übernehmen
Von Hogosha im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 25.12.08, 21:03 -
Kurve in pictureBox zeichnen
Von MC_Straßenköter im Forum .NET ArchivAntworten: 1Letzter Beitrag: 15.06.05, 16:34 -
Anfängerfrage zum Zeichnen
Von Hypnos im Forum .NET ArchivAntworten: 3Letzter Beitrag: 12.04.05, 15:59 -
Drag and Drop: Wie kann ich eine Bitmap vom Explorer in eine PictureBox ziehen.
Von tass im Forum .NET ArchivAntworten: 2Letzter Beitrag: 14.05.04, 17:05





Zitieren
Login





