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.
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.
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
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:
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
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:
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
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