 |
| Top-Quellcodes |
|
|
| Rubriken |
|
|
| Kontakt |
|
|
| Suchen |
|
|
|
|
|
Hier möchte ich Ihnen die Grafikausgaben und -operationen in Visual Basic
etwas näher bringen. Das Zeichnen von Linien und geometrischen Objekten und
der Umgang mit Bitmaps soll hier vorgestellt werden.
Übersicht:
Line & Co
Bitmaps
Koordinaten...
PaintPicture
Farben
|
Es stehen Ihnen mehrere Möglichkeiten zur Verfügung, um in Visual Basic Linien
und Figuren zu zeichnen.
Zum einen über das Einfügen des Shape-Objekts, zum anderen über die
eingebauten Methoden von VB oder direkt über die API.
|
Methode |
Syntax |
Beschreibung |
| CIRCLE |
(x,y), Radius, Farbe, Start, Ende,
Aspekt |
Zeichnet einen Kreisbogen, Ellipse,
Aspekt ist der Rundungsfaktor. |
| LINE |
[Step] (x1, y1) - [Step] (x2, y2), Farbe, BF |
Zeichnet eine Linie oder ein Rechteck, falls als letzter
Parameter "B" angegeben wird. Im Falle von "BF" wird das Rechteck mit der
angegebenen Farbe gefüllt. |
| PSET |
[Step] (x, y), [Farbe] |
Zeichnet einen einzelnen Punkt, wird
keine Farbe angegeben, wird FillColor herangezogen. |
| POINT |
(x, y) |
Damit können Sie die Farbe (RGB) eines Punktes erfahren. |
|
Beispiele:
Zeichnet einen schwarzen Kreis im Radius von 50 Einheiten (pixel), X- und
Y-Koordinaten ebenfalls 50.
Picture1.Circle (50, 50), 50

Zeichnet ein Rechteck in der Farbe "Magenta"
mit den angegebenen Koordinaten. Beachten Sie, dass ScaleMode der Picturebox auf
vbPixels steht. Bei Standardeinstellung "Twips" würde das Rechteck viel
kleiner ausfallen...
Picture1.Line (10, 20) - (110, 120), RGB(255, 0, 255), B

Standardmässig ist die Einheit "Twips" vorgegeben. Es
empfiehlt sich meist, stattdessen "vbPixels" anzugeben. Natürlich können Sie
auch andere Masseinheiten verwenden.
Die Koordinaten beziehen sich immer auf den Container, in den vorigen Fällen war
es eine Picturebox. Eine Ausgabe wäre auch direkt auf einer Form denkbar.
Allerdings ist es leichter, eine Picturebox zu einem späteren Zeitpunkt auf
einem Formular anders anzuordnen; die Koordinaten bleiben immer gleich.
Wie groß ist ein "Twip" ?
Ein Twip ist eine Einheit in Visual Basic, die etwa 1/1440 Zoll oder 0,0176
Millimeter entspricht.
Umrechnung auf Pixel:
Das hängt von der Bildschirmauflösung ab, im Falle von 800 x 600 hat 1 Pixel
etwa 15 Twips
Umrechnung auf Zentimeter:
Oft werden Zentimeter gebraucht, zB für die Druckerausgabe. 1 Zentimeter sind
567 Twips. Da empfiehlt sich gleich eine kleine Funktion, um nicht jedesmal
umrechnen zu müssen:
Public Sub CM(Zahl)
CM = Zahl * 567
End Sub
Aufruf:
' zwei Zentimeter von links...
Printer.CurrentX = CM(2)
Farben und Muster
|
Eigenschaft |
Bedeutung |
| DrawMode |
Kombination der Linie / Rechteck mit dem
Hintergrund(muster) |
| DrawStyle |
Gibt an, ob die Linie durchgezogen oder
strichliert, punktiert, etc. wird |
| DrawWidth |
Die Stärke der Linie von 1 bis 32.767
Pixel |
| FillColor |
Füllfarbe für Objekte (Kreis und
Rechteck) |
| FillStyle |
Hintergrundmuster für die Füllung |
|
Achten Sie darauf, für den Container, auf dem die Zeichenoperationen
stattfinden, Autoredraw=True einzustellen, da sonst beim Verdecken der Form
die Grafiken nicht neu gezeichnet werden.
Beispiel:
Private Sub Form_Load()
Picture1.DrawMode = vbCopyPen ' (13)
Picture1.DrawStyle = vbDashDot ' (3)
Picture1.DrawWidth = 10
Picture1.FillStyle = 6 ' cross
Picture1.Line (10, 20)-(110, 120), RGB(0, 0, 255), B
End Sub

Koordinaten:
Ein Wort noch zu den Koordinaten; Beim Line-Befehl oder auch Circle-Befehl
werden die Punkte definitiv angegeben. Anders bei der Print-Methode. Egal ob
auf dem Picture-Objekt oder Printer-Objekt...
Sie müssen die Position angeben. Das geschieht mit CurrentX und
CurrentY.
Picture1.CurrentX = 50
Picture1.CurrentY = 50
Picture1.Print "Hallo Welt"
|
Was ist eine Bitmap ?
Eine Bitmap ist die Darstellung eines Bildes in binärer Form. Jeder Bildpunkt
wird durch eine bestimmte Anzahl an Bits dargestellt; die Größe wird als
Auflösung bezeichnet und ist in der Bitmap-Datei fix verankert. Sie können
zwar eine Bitmap vergrößern oder verkleinern, das ändert aber nichts an der
Auflösung.
Wie behandelt Windows oder Visual Basic eine Bitmap ?
Wenn in VB eine Bitmap eingelesen wird (eine Datei im Format *.bmp, *.rle oder
*.dib) werden die Header- und Farbinformationen ausgelesen. Die Darstellung
erfolgt über das interne Pictureobjekt bzw über die
IPicture-Disp-Schnittstelle.
Laden eines Bildes:
Die Anzeige erfolgt nun meist in einer Picturebox (oder auch direkt
auf dem Drucker):
Picture1.Picture = LoadPicture("F:\Test\meinBild.bmp")
Für Grafikoperationen, die momentan nicht sichtbar zu sein brauchen, kann das
Bild auch im Speicher abgelegt werden:
Dim meinBild As Picture
Set meinBild = LoadPicture(Pfad)
Speichern eines Bildes:
SavePicture Picture1.Image, "C:\test.bmp"
Verwenden Sie für SavePicture immer die Image-Eigenschaft eines Bildes, um es
als Bitmap abzuspeichern. Die Image-Eigenschaft ist das dauerhafte Abbild
einer Bitmap.
|
Sie können für Forms, Pictureboxen und PrinterObjekt eigene Einteilungen
setzen, indem Sie das innere Koordinatensystem ansprechen. Es können also
andere Masseinheiten als die Standardeinstellung "Twips" gesetzt werden.
Die Abmessungen erfahren Sie über Objekt.Width und Objekt.Height; die inneren
Abmessungen (ohne Ränder) mit Objekt.ScaleWidth und Objekt.ScaleHeight. Die
linke obere Ecke erfahren Sie normalerweise mit Objekt.Top und Objekt.Left;
Pendant dazu ist Objekt.ScaleTop und Objekt.ScaleLeft.
Mit der Scale-Methode können Sie eigene Unterteilungen bestimmen, also
komplett andere Masseinheiten verwenden.
Picture1.Scale (0, 0) - (110, 110)
Unterteilt die Picturebox in 110 Einheiten. Ziehen Sie die Picturebox größer,
verschieben sich auch die Koordinaten, die Einheiten werden also größer.
Beispiel:
Private Sub Form_Load()
Dim i As Integer
Picture1.AutoRedraw = True
Picture1.Scale (0, 0)-(110, 110)
For i = 110 To 10 Step -10
Picture1.Line (0, i)-(2, i)
Picture1.CurrentY = Picture1.CurrentY + 1.5
Picture1.Print i 'Nummerierung
Picture1.Line (Picture1.ScaleWidth - 2,
i)-(Picture1.ScaleWidth, i)
Picture1.CurrentY = Picture1.CurrentY + 1.5
Picture1.CurrentX = Picture1.ScaleWidth - 9
Picture1.Print i
Next
Picture1.ForeColor = vbRed
Picture1.Line (20, 30)-(90, 90)
End Sub
Ergebnis:

Testen Sie und verändern Sie die Größe der Picturebox.
|
Mit der Methode PaintPicture können Sie quasi den Inhalt eines Bildfeldes
einem anderen zuweisen, kopieren also.
Aber PaintPicture kann noch viel mehr, es kann nämlich die Größe des
Zielbildes ändern oder das Zielbild spiegeln.
Snytax:
Object.PaintPicture Bild, x1, y1, Breite1, Höhe1, x2, y2, Breite2, Höhe2,
OpCode
Paintpicture wird gerne zur Erstellung von sogenannten Thumbnails
herangezogen, oder einfach, um ein Bild an gegebenen Abmessungen anzupassen.
Beispiel:
Sie brauchen zwei Pictureboxen, eine dient als temporäre Box, die das
Originalbild enthält, auf die andere wird ein verkleinertes Bild gezeichnet:
Private Sub Form_Load()
PictureDummy.Picture = LoadPicture("D:\test.bmp")
PictureAusgabe.PaintPicture _
PictureDummy.Picture, 0, 0, _
PictureAusgabe.ScaleWidth, _
PictureAusgabe.ScaleHeight
End Sub

|
Auf dem Bildschirm dargestellte Farben setzen sich aus ROT, GRÜN und BLAU
zusammen. Man spricht vom RGB-Modell.
Es gibt zwar auch noch andere Farbmodelle, aber RGB wird unter Windows
verwendet..
Man kann nun diese drei Grundfarben überlagern oder ausblenden, um eine
bestimmte Farbe / Farbwert zu erhalten. Das Ergebnis einer solchen Mischung
ist ein 24-Bit-Farbwert. Jeder der drei Grundfarben hat einen 8-Bit-Wert; da
ein 8-Bit-Wert 256 verschiedene Zustände oder Werte annehmen kann, liegt der
Anteil der Grundfarbe im Bereich von 0 bis 255 - und daraus ergibt sich wieder
eine maximale Darstellung von 16,7 Millionen Farben (TrueColor)
Anmerkung: Visual Basic wandelt den 24-Bit-Wert in einen 32-Bit-Wert vom Typ
LONG um.
Sie können einem Objekt eine Farbe auf mehreren Arten zuweisen:
1. Möglichkeit:
Dim Farbe As Long
Farbe = &HFFFF&
Label1.BackColor = Farbe 'ergibt gelb
2. Möglichkeit:
Label1.BackColor = RGB(255, 100, 45) ' RGB-Modell
3. Möglichkeit:
Label1.BackColor = QBColor(5) ' einer der 16 Grundfarben
4. Möglichkeit:
Label1.BackColor = vbButtonShadow 'Systemfarbe
|
Das war eine kleine Einführung in Grafikausgaben und -operationen. Zeichnen
von Diagrammen, Linien, beliebigen Objekten sollten jetzt keine Probleme
bereiten.
In einem nächsten Tutorial werde ich mich der Grafikausgabe über
API-Funktionen widmen. Diese sind nicht immer schneller als die
Visual-Basic-Funktionen, weisen aber weit mehr Möglichkeiten zur
Grafikmanipulation auf (Transparenz, Fading, Schärfen, Weichzeichnen, Polygone
zeichnen und vieles mehr).
|
|