·  Start ·  Programme ·  Codes ·  Tipps ·  ActiveX ·  Tutorials · 




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
 
 
 Line & Co

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"
 

 Bitmaps

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.

 

 Koordinaten

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.

 

 PaintPicture

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
   

 

 Farben

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
 

 Zusammenfassung

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).
 
Aktualisiert: 12.02.2008, 20:49 Uhr Copyright © 2001 - 2010 by ST-software Navigation zurück  |  Navigation vorwärts  |  Zum Seitenanfang     
Ihre IP: 38.107.191.82 ·  Seite erstellt in: 0.309 Sekunden ·  Dateigröße:  17564 Bytes