Überblick
----Derzeit können Sie in vielen Lernsoftware- und Spiele-CDs häufig verschiedene sehen
Die grafische Darstellungstechnologie basiert auf Bewegung, Interlacing, Regentropfenform, Jalousien, Stapelung von Bausteinen und anderen Darstellungsmethoden von Grafiken, um das Bild lebendiger und für das Publikum attraktiver zu machen. In diesem Artikel wird untersucht, wie verschiedene grafische Anzeigetechniken in Delphi implementiert werden.
Grundprinzipien
----In Delphi ist es sehr einfach, ein Bild anzuzeigen. Definieren Sie einfach eine TImage-Komponente im Formular, legen Sie ihr Bildattribut fest und wählen Sie dann eine beliebige gültige .ICO-, .BMP-, .EMF- oder .WMF-Datei aus, laden Sie sie. und die ausgewählte Datei wird in der TImage-Komponente angezeigt. Dadurch werden die Grafiken jedoch nur direkt im Formular angezeigt, und es ist überhaupt keine Fähigkeit erforderlich. Um der grafischen Darstellung eine einzigartige Wirkung zu verleihen, können Sie folgende Schritte befolgen:
----Definieren Sie eine TImage-Komponente und laden Sie zuerst die anzuzeigenden Grafiken in die TImage-Komponente. Mit anderen Worten: Laden Sie den Grafikinhalt von der Festplatte in den Speicher als Grafikcache.
----Erstellen Sie ein neues Bitmap-Objekt mit derselben Größe wie die Grafiken in der TImage-Komponente.
----Verwenden Sie die CopyRect-Funktion von Canvas (kopieren Sie den rechteckigen Bereich einer Leinwand in den rechteckigen Bereich einer anderen Leinwand), verwenden Sie Techniken und formen Sie sie dynamisch
Konvertieren Sie den Dateiinhalt in eine Bitmap und zeigen Sie die Bitmap dann im Formular an.
----Implementierungsmethode
Im Folgenden werden verschiedene grafische Darstellungstechniken vorgestellt:
1.Push-Pull-Effekt
Die anzuzeigenden Grafiken werden von oben, unten, links und rechts in den Bildschirm gezogen und gleichzeitig die ursprünglichen alten Grafiken auf dem Bildschirm verdeckt. Dieser Effekt kann in vier Bereiche unterteilt werden
Es gibt drei Arten: Pull-Up, Pull-Down, Links-Pull und Rechts-Pull, aber die Prinzipien sind ähnlich. Nehmen Sie den Pull-Up-Effekt als Beispiel.
Prinzip: Verschieben Sie zunächst die erste horizontale Linie in der temporären Grafik zur letzten anzuzeigenden Bitmap und dann die ersten beiden horizontalen Linien in der temporären Grafik zu den letzten beiden anzuzeigenden Bitmaps und dann Verschieben Sie die ersten drei und ersten vier???, bis alle Grafikdaten verschoben sind. Während des Verschiebevorgangs können Sie sehen, dass die angezeigte Bitmap von unten nach oben schwebt, wodurch ein Pull-Up-Effekt entsteht.
Programmalgorithmus:
PROzedur TForm1.Button1Click(Sender: TObject);
var
newbmp: TBitmap;
i,bmpheight,bmpwidth:integer;
beginnen
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
for i:=0 to bmpheight do
beginnen
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-i,bmpwidth,bmpheight),
Bild1.Leinwand,
Rect(0,0,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
Ende;
newbmp.free;
Ende;
2. Vertikal gestaffelter Effekt
Prinzip: Teilen Sie die anzuzeigenden Grafiken in zwei Teile auf. Die ungeraden Scanlinien werden von oben nach unten und die geraden Scanlinien von unten nach oben verschoben, und beide werden gleichzeitig ausgeführt. Auf dem Bildschirm können Sie sehen, dass sich die helleren Grafiken am oberen und unteren Ende zur Mitte des Bildschirms hin bewegen, bis sie vollständig klar sind.
Programmalgorithmus:
procedure TForm1.Button4Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmpwidth:integer;
beginnen
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
i:=0;
while i< =bmpheight do
beginnen
j:=i;
während j>0 tun
beginnen
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
Bild1.Leinwand,
Rect(0,bmpheight-i+j-1,bmpwidth,bmpheight-i+j));
newbmp.Canvas.CopyRect(Rect
(0,bmpheight-j,bmpwidth,bmpheight-j+1),
Bild1.Leinwand,
Rect(0,ij,bmpwidth,i-j+1));
j:=j-2;
Ende;
form1.Canvas.Draw(120,100,newbmp);
i:=i+2;
Ende;
newbmp.free;
Ende;
3. Horizontal gestaffelter Effekt
Prinzip: Dasselbe Prinzip wie beim vertikalen Interlacing-Effekt, mit der Ausnahme, dass die in zwei Gruppen unterteilten Grafiken vom linken bzw. rechten Ende in den Bildschirm verschoben werden.
Programmalgorithmus:
procedure TForm1.Button5Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmpwidth:integer;
beginnen
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
i:=0;
while i< =bmpwidth do
beginnen
j:=i;
während j>0 tun
beginnen
newbmp.Canvas.CopyRect(Rect(j-1,0,j,bmpheight),
Bild1.Leinwand,
Rect(bmpwidth-i+j-1,0,bmpwidth-i+j,bmpheight));
newbmp.Canvas.CopyRect(Rect
(bmpwidth-j,0,bmpwidth-j+1,bmpheight),
Bild1.Leinwand,
Rect(ij,0,i-j+1,bmpheight));
j:=j-2;
Ende;
form1.Canvas.Draw(120,100,newbmp);
i:=i+2;
Ende;
newbmp.free;
Ende;
4. Regentropfeneffekt
Prinzip: Verschieben Sie die letzte Scanlinie der temporären Grafik der Reihe nach zur ersten bis letzten Scanlinie der sichtbaren Bitmap, sodass diese Scanlinie ihre Spur auf dem Bildschirm hinterlassen kann. Anschließend wird die vorletzte Scanzeile der temporären Grafik der Reihe nach zur ersten bis vorletzten Scanzeile der sichtbaren Bitmap verschoben. Und so weiter für die verbleibenden Scanzeilen.
Programmalgorithmus:
procedure TForm1.Button3Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmpwidth:integer;
beginnen
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
for i:=bmpheight downto 1 do
für j:=1 bis i do
beginnen
newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),
Bild1.Leinwand,
Rect(0,i-1,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
Ende;
newbmp.free;
Ende;
5.Lamelleneffekt
Prinzip: Teilen Sie die in den temporären Grafiken platzierten Daten in mehrere Gruppen auf und verschieben Sie sie dann nacheinander von der ersten zur letzten Gruppe. Beim ersten Mal verschiebt jede Gruppe die erste Scanlinie an die entsprechende Position der sichtbaren Bitmap und beim zweiten Mal Zeit Verschieben Sie die zweite Scanlinie und dann die dritte und vierte Scanlinie.
Programmalgorithmus:
procedure TForm1.Button6Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmpwidth:integer;
xgroup,xcount:integer;
beginnen
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
xgroup:=16;
xcount:=bmpheight div xgroup;
for i:=0 to xcount do
für j:=0 bis xgroup tun
beginnen
newbmp.Canvas.CopyRect(Rect
(0,xcount*j+i-1,bmpwidth,xcount*j+i),
Bild1.Leinwand,
Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
form1.Canvas.Draw(120,100,newbmp);
Ende;
newbmp.Free;
Ende;
6. Bausteineffekt
Prinzip: Es handelt sich um eine Variation des Regentropfeneffekts. Der Unterschied besteht darin, dass der Bausteineffekt jedes Mal ein Stück Grafik bewegt, nicht nur eine Scanlinie.
Programmalgorithmus:
procedure TForm1.Button7Click(Sender: TObject);
var
newbmp:TBitmap;
i,j,bmpheight,bmpwidth:integer;
beginnen
newbmp:= TBitmap.Create;
newbmp.Width:=image1.Width;
newbmp.Height:=image1.Height;
bmpheight:=image1.Height;
bmpwidth:=image1.Width;
i:=bmphheight;
während i>0 es tut
beginnen
für j:=10 bis ich es tue
beginnen
newbmp.Canvas.CopyRect(Rect(0,j-10,bmpwidth,j),
Bild1.Leinwand,
Rect(0,i-10,bmpwidth,i));
form1.Canvas.Draw(120,100,newbmp);
Ende;
i:=i-10;
Ende;
newbmp.free;
Ende;
Abschluss
Die oben genannten grafischen Anzeigeeffekte wurden auf den Computer übertragen, die Softwareumgebung ist Delphi 3.0 und die Hardwareumgebung ist ein Pentium 100M-kompatibler Computer. Es funktioniert großartig.