Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi kurzvortrag / einfürhrung in Grafikprogrammierung - ca 15min (https://www.delphipraxis.net/57838-kurzvortrag-einfuerhrung-grafikprogrammierung-ca-15min.html)

Baeumchen 27. Nov 2005 13:47


kurzvortrag / einfürhrung in Grafikprogrammierung - ca 15min
 
Hallo Delphi-Freaks

ich muss leider am dienstag einen kurzvortrag halten
also ich muss eine einführung in die Grafikprogrammierung machen
also so mit ein bissel canvas, Image/pintBox und so

habe leider kein plan davon habe auch nix brauchbares gefunden


wenn mir einer helfen kann, wäre ich richtig glücklich zum 1. Advent
die Bsp dazu würde ich versuchen zuerstellen


mfg
Norbert Baum
und noch einen schönen Advent

hanselmansel 27. Nov 2005 13:52

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Vor welcher Art von Publikum? :wink:

Baeumchen 27. Nov 2005 13:56

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
meine klasse
haben kaum plan von delphi
also n paar schleifen und ausgabe aber richtige komplexe sachen kann keiner richtig!

arbu man 27. Nov 2005 14:00

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Einfürhrung in Grafikprogrammierung
Delphi-Quellcode:
canvas.pen
ist der Zeichenstift den kann man mit
Delphi-Quellcode:
Canvas.moveto(x,y)
auf der Zeichenfläche bewegen und mit
Delphi-Quellcode:
Canvas.lineto(x,y)
eine Linie zeichnen.

Es gibt noch weitere Funktionen wie
Delphi-Quellcode:
Canvas.Rectangle(Rect); // Rechteck
Canvas.Ellipse(Rect); // Ellipse
Für die Textausgabe gibt es
Delphi-Quellcode:
Canvas.TextOut(X, Y, Text);
Und für die Grafikausgabe:
Delphi-Quellcode:
Canvas.Draw(X, Y, Graphic); // Grafik einfach zeichen
Canvas.StretchDraw( Rect, Graphic); // Grafik aussammengestaucht zeichen
Das ist eigentlich das wesentliche des Canvas Object.

Matze 27. Nov 2005 14:02

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Du kannst ja zeigen, wie man auf einem Canvas zeichnet:

Linien:
Delphi-Referenz durchsuchenMoveTo / Delphi-Referenz durchsuchenLineTo
Rechtecke:
Delphi-Referenz durchsuchenRectangle
Ellipsen / Kreise:
Delphi-Referenz durchsuchenEllipse

RoundRect gibt's glaub auch (abgerundete Ecken).

Bei der Ellipse und den Rechtecken kannst du die Farbe ja ändern:
Umrandung:
Delphi-Referenz durchsuchenPen.Color
Füllfarbe:
Delphi-Referenz durchsuchenBrush.Color

Text ausgeben:
Delphi-Referenz durchsuchenTextOut

Natürlich kannst du das auch auf das Canvas eines Bitmaps (Delphi-Referenz durchsuchenTBitmap) zeichnen und anschließend abspeichern. Auch kannst du die Zeichenfunktionen auch in einer Schleife ausführen, dort die Parameter ändern udn so ganz nette Effekte erzielen. Nur so ein paar Anregungen.


PS: Ich poste das trotz dem roten Kasten, da es nicht ganz identisch ist.

hanselmansel 27. Nov 2005 14:16

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Ich stimme meinen Vorpostern voll und ganz zu, und würde folgendes hinterhersetzen, wenn mein Auditorium bis dahin noch nicht wie ein Auto guckt:
Du kannst erzählen, dass eigentlich alle sichtbaren Dinge (Forms, Buttons etc. pp.) ein Canvas haben, und das man das auch verändern kann.

Baeumchen 27. Nov 2005 14:34

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
ok danke!!

Canvas.Rectangle(Rect); // Rechteck
was bedeutet Rect?

Canvas.Draw(X, Y, Graphic); // Grafik einfach zeichen
oder hier Grafic?
X, Y is ja der punkt


und habt ihr noch n paar leichte, nette ideen für bsp-programme?

hanselmansel 27. Nov 2005 14:56

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Das "Rect" ist ein Rechteck vom Typ TRectangle (glaub ich). Die OH weiß diesbezüglich mehr als ich. "Graphic" ist AFAIK vom Typ TGraphic.

Beispielprogramme:
  • Eine Pyramide aus Rechtecken zeichnen. Findet sich hier im Forum.
  • Beim Buttonklick selbigen verändern
  • etc. pp.

MfG,

hanselmansel

Matze 27. Nov 2005 16:04

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Rechtecke kann man, soweit ich weiß, auch so zeichnen:

Delphi-Quellcode:
Canvas.Rectangle(0, 0, 200, 100);
ohne Umweg über TRect. DOch ganz sicher bin ich mir nicht.

hanselmansel 27. Nov 2005 16:06

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Zitat:

Zitat von Matze
Rechtecke kann man, soweit ich weiß, auch so zeichnen:

Delphi-Quellcode:
Canvas.Rectangle(0, 0, 200, 100);
ohne Umweg über TRect. DOch ganz sicher bin ich mir nicht.

You're right :thumb:

Baeumchen 27. Nov 2005 16:33

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
ok werde mich jetzt damit noch ein bissel beschäftigen und dann mal gucken was am dienstag drauß wird!

danke noch mal..wenn ich noch frage habe dann poste ich einfach

-NIP- 27. Nov 2005 18:19

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Mit der Funktion/Prozedur "Pixels"(oder Eigenschaft ;)) vom TCanvas kannst du dir entweder die Farbe eines Pixels im Canvas als TColor zurückgeben lassen, oder du veränderst die Farbe des Pixels mit derselben Prozedur.

Aufbau bei Pixelfarbe auslesen:
Farbe:=Canvas.Pixels[5,5];

Farbe:Variable vom Typ TColor in der die Farbe des angegebenen Pixels gespeichert wird
[5,5]: der erste grüne Wert gibt die Position des Pixels auf der X-Achse an, der zweite die Position auf der Y-Achse. Dabei ist ganz oben links die Koordinate [0,0], also:

Code:
--Y
X 0 1 2 3 4 5 ...
  1 o o o o o ...
  2 o o o o o ...
  3 o o o o o ...
  4 o o o o o ...
  5 o o o o o ...
  .
  .
  .
("o" stellt einfach einen Pixel dar)

Aufbau bei Pixelfarbe setzen:
Canvas.Pixels[5,5]:=Farbe;

Farbe: Nun wird Farbe als Variable benutzt, die die Farbe repräsentiert die letztendlich auf den Pixel gezeichnet wird.
[5,5]: Ist wieder die Koordinatenangabe des Pixels, [b]aber[/] nun wird auf ihn mit der angegebenen Farbe gemalt und nicht sein Farbwert ausgelesen.

Beispiel:
Delphi-Quellcode:
var
  Farbe: TColor;
begin
  Farbe:= Canvas.Pixels[2,2]; {Liest die Farbe des Pixels auf den Koordinaten X:2 Y:2 aus und schreibt sie in die Variable "Farbe".}
  Canvas.Pixels[3,3]:= Farbe; {Färbt den Pixel auf den Koordinaten X:3 Y:3 in der Farbe der Variable "Farbe"}
end;
Um deine Zuhörer noch ein bisschen zu "beeindrucken" kannst du die Prozedur MSDN-Library durchsuchenBitBlt(stellt Windows bereit), vorstellen, die Teilbereiche/den ganzen Bereich aus einem Canvas/Bitmap in ein anderes Canvas/Bitmap kopiert.
Eine ähnliche Methode hat TCanvas schon. Das schon besagt Canvas.Draw zeichnet einfach ein Bitmap an die angegebenen X und Y Koordinaten vom Zielbild. BitBlt ist allerdings wesentlich flexibler und imho auch schneller.

Canvas.Draw(5,5,Grafik);
Die ersten beiden Werte sind die X und Y Koordinaten, wohin das Bild gezeichnet werden soll.
Die Zweite Variable "Grafik" vom Typ TGraphic ist das Bild, welches an die X und Y Koordinaten gezeichnet wird.

BitBlt
Zitat:

Zitat von MSDN Library
Code:
BOOL BitBlt(
  HDC hdcDest, // handle to destination DC
  int nXDest, // x-coord of destination upper-left corner
  int nYDest, // y-coord of destination upper-left corner
  int nWidth, // width of destination rectangle
  int nHeight, // height of destination rectangle
  HDC hdcSrc, // handle to source DC
  int nXSrc,  // x-coordinate of source upper-left corner
  int nYSrc,  // y-coordinate of source upper-left corner
  DWORD dwRop // raster operation code
);

Diese Funktion ist zwar schneller, aber auch ungemütlicher ;)(aber dafür auch flexibler wie gesagt).
Ich weiß nicht, ob du dich mit Handles auskennst. Handles sind so etwas wie Adressen von "Objekten".
Und da TCanvas auch ein Handle hat ;), kann man diese Methode auch damit benutzen.

Erklärung
Code:
BOOL BitBlt(
  HDC hdcDest, // Handle des Zielcanvas (also das Canvas, wo er draufzeichnen soll)

  int nXDest, // X-Koordinate, wohin er zeichnen soll (wieder von oben links aus gesehen)

  int nYDest, // Y-Koordinate, wo er zeichnen soll

  int nWidth, // Breite des zu zeichnenden Bildausschnittes

  int nHeight, // Höhe des zu zeichnenden Bildausschnittes

  HDC hdcSrc, // Handle des Quellcanvas (also das Canvas, dessen Ausschnitt er auf das Zielcanvas zeichnen soll)

  int nXSrc,  // X-Koordinate vom zu zeichnenden Ausschnitt auf dem Quellcanvas

  int nYSrc,  // Y-Koordinate vom zu zeichnenden Ausschnitt auf dem Quellcanvas

  DWORD dwRop // imho die Art wie er die Farben beim Draufzeichnen mischt

);
Beispiel:
sagen wir mal wir hätten zwei Images.
Auf Image1 soll ein Ausschnitt von Image2 gezeichnet werden
Delphi-Quellcode:
begin
  BitBlt(Image1.Canvas.Handle,2,2,100,100,Image2.Canvas.Handle,0,0,SrcCopy);
end;
Also:
  • Er zeichnet auf Image1.Canvas
  • Er zeichnet von Image2.Canvas
  • Der Ort auf Image1, wo der Ausschnitt hinkommt ist X:2 Y:2
  • Die Breite und die Höhe des Ausschnittes beträgt 100
  • Der Ausschnitt ist auf Image2 von den Koordinaten X:0 Y:0 abgegriffen

So, das wars erstmal :D

Korrigiert mich, wenn ich was falsch gemacht habe.

[Edit] Warscheinlich kann man alleine mit der Methode BitBlt 15min. füllen :lol: [/Edit]

hanselmansel 27. Nov 2005 18:25

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Zitat:

Zitat von -NIP-
Mit der Funktion/Prozedur "Pixels" vom TCanvas

Wow! So eine gute Erläuterung der Eigenschaft :wink: "Pixels" habe ich echt noch selten gesehen! :mrgreen: :thumb:

arbu man 27. Nov 2005 18:28

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Zitat:

Canvas.Rectangle(Rect); // Rechteck
was bedeutet Rect?

Canvas.Draw(X, Y, Graphic); // Grafik einfach zeichen
oder hier Grafic?
X, Y is ja der punkt
Rect bedeutet das du hier etwas vom type Trect angeben musst ein TRect gibt ein recteck an. es gibt eine function (die heißt auch rect) mit der man ein TRect erzeugen kann
Bsp.: Rect(0,0,100,100);
man kann das ganze auch als Variable machen:
Delphi-Quellcode:

var myrect:trect;
begin
  myrect.Left:=0;
  myrect.Top:=0;
  myrect.Right:=100;
  myrect.Bottom:=100;
  Canvas.Rectangle(myrect);
end;
Graphic ist der basistype für grafiken (TGraphic) da kanst du z.B. ein TBitmap einsetzen

Baeumchen 27. Nov 2005 20:27

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Danke für die weiteren Hilfen/Texte/Erklärungen!
muss mich da jetzt noch ein bissel rein abreiten und dann denke ich mal das ich für meine klasse was brauchbares schaffen kann ;)

also dann danke noch mal
schönen abend noch und vorallem schöne arbeitswoche / schulwoche

Angel4585 28. Nov 2005 10:24

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
Zitat:

Zitat von Baeumchen
meine klasse
haben kaum plan von delphi
also n paar schleifen und ausgabe aber richtige komplexe sachen kann keiner richtig!

Erinnert mich an meine alte BKIK Klasse :mrgreen:

Baeumchen 29. Nov 2005 07:14

Re: kurzvortrag / einfürhrung in Grafikprogrammierung - ca 1
 
guten morgen DP'ler

ich habe es jetzt hinter mir
es könnte so sein, also hätten sie es verstanden und können es auch anwenden trotz weiter hilfe ;)

naja mal schauen....mal gucken was ich jetzt dazu bekomme


danke noch mal an alle...ohne euch wäre ich verloren gewesen!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz