![]() |
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 |
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. |
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 ?
|
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. :) ) |
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:
wobei ich die X und Y Koordinaten eintrage und der Booleanwert die Sichbarkeit definiert ?
var
maske : array [1..2] of boolean; |
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:
Gruß Hawkeye
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; |
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. :) |
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 ![]() ![]() grüsse, hannes |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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