Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Runde Images für CD Label (https://www.delphipraxis.net/70650-runde-images-fuer-cd-label.html)

bundy 2. Jun 2006 09:18


Runde Images für CD Label
 
Hi ! :hi:

Ich hab mir folgendes Project votgenommen.
Ein Programm zum Beschriften & Drucken von CD + DVD Labels.

Meine Frage ist nun folgende :?: :

Wie kann ich ein Images rund darstellen, oder besser gesagt eine Schablone die rund ist und in welche man ein Image laden könnte.
Hat von euch jemand ne Idee oder einen Ansatz wie ich so etwas anfangen könnte ?

lg
Bundy

Vjay 2. Jun 2006 09:24

Re: Runde Images für CD Label
 
Hallo,

es gibt leider keine runden Bitmaps (zumindest nicht im Speicher). Aber was hälst du davon alles ausserhalb der CD-Region weiss zu lassen. Dann sollte es dein Drucker dir gleich tun.
Ein viereckiges Bild rund zu bekommen, gibt es mehrere möglichkeiten, entweder malst du alles ausserhalb des Kreises weiss oder du setzt eine Clipping-Region. Ich denke weiss malen ist erstmal einfacher, schaue dir mal TCanvas an.

bundy 2. Jun 2006 09:28

Re: Runde Images für CD Label
 
Meinst du ich sollte das Label Picture in ein Image laden, und dann im Canvas darüber einen weissen Kreis malen ?

chaosben 2. Jun 2006 09:35

Re: Runde Images für CD Label
 
Du könntest dir eine Art Maske im Speicher hinterlegen, ähnlichem der Alpha-Kanal bei geblendetem Images. Das wäre ein zweidimensionales Array von Boolean-werten die angeben, ob das Pixel gezeichnet werden soll oder nicht. In diesem Array setzt du dann durch eine "ausgefüllten Kreis malen"-Funktion alles relevanten Werte auf true, und den Rest auf False.
Dann brauchst du dein Bild, das die gleichen Maße hat wie dein Array. Das legst du sinnbildlich unter die Maske und malst nur die Pixel, deren passender Wert in dem Array true ist.
Auf diese Weise hast du in etwa das nachgebildet, was die Windows GDI unter dem Thema Clipping versteht (was wiederum bedeutet, das du auch das Clipping nutzen könntest. :) )

bundy 2. Jun 2006 09:44

Re: Runde Images für CD Label
 
das klingt prima, jetzt schau ich mal wie das mit der Umsetzung hin bekomme :)

Das heist:

Delphi-Quellcode:
var
maske : array [1..2] of boolean;
wobei ich die X und Y Koordinaten eintrage und der Booleanwert die Sichbarkeit definiert ?

Hawkeye219 3. Jun 2006 00:35

Re: Runde Images für CD Label
 
Hallo Bundy,

Vjay hat es bereits angedeutet, eine Clipping-Region könnte das Mittel der Wahl sein. Hier eine kleine Hilfe:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var lRgn : HRGN;
begin
  // runde Region erzeugen
  lRgn := CreateEllipticRgn(0, 0, Image1.Width, Image1.Height);
  // als Clipping-Bereich setzen
  SelectClipRgn(Image1.Canvas.Handle, lRgn);
  // Region freigeben
  DeleteObject(lRgn);
  // alle folgenden Zeichenbefehle wirken nur auf den Kreis
  Image1.Canvas.Brush.Color := clRed;
  Image1.Canvas.FillRect (Image1.ClientRect);
end;
Gruß Hawkeye

chaosben 3. Jun 2006 21:58

Re: Runde Images für CD Label
 
@bundy:

Da hat Hawkeye recht. Und mit 98%iger Wahrscheinlichkeit, ist die Clipping-Methode schneller als unser Array. Aber vielleicht hat hat dir die Geschichte mit dem Array die Sache mit dem Clipping ein wenig verständlicher gemacht. :)

noch_ein_hannes 3. Jun 2006 22:24

Re: Runde Images für CD Label
 
hi,

wenn Du den Kreis richtig rund bekommen möchtest (also keine Treppchen) dann würde ich eine Alpha-Maske drüberlegen. Es gibt eine Komponente die png mit alpha unterstützt. Damit könntest Du das "Loch mit weiss drumherum" drüberlegen ...

Ich glaube die Komponente hiess Hier im Forum suchenGR32_PNG bzw. Bei Google suchenGR32_PNG :-)

grüsse,
hannes


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

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