Farbverlauf bei Canvas
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Farbverlauf bei Canvas
Moin Moin,
hier hab ich mal eine Fragen, wo ich mal davon ausgehen, das da Nicht jeder mal darüber nachgadacht hat.
und Zwar will ich einen farbverlauf.
Dieser Farbverlauf soll wie folgt ausgebaut werden
a) 5 Stufen
b) die Sufen sollen z.B. bei Rot wie folgt autimatisch errechnet werden.
1) Stufe: Ton = 0, Sättigung = 40, Wert = 100;
2) Stufe: Ton = 0, Sättigung = 70, Wert = 100;
3) Stufe: Ton = 0, Sättigung = 100, Wert = 100;
4) Stufe: Ton = 0, Sättigung = 100, Wert = 70;
5) Stufe: Ton = 0, Sättigung = 100, Wert = 40;
c) Hintergrundharbe oder Schriftfarbe spiet keine rolle.
d) wenn doch Schriftfarbe, dann auch entsprechenden Buchstaben im Farbverlauf.
Weis, das es da Schwer wird, aber dennoch sicherlich nincht unmöglich oder?
hier hab ich mal eine Fragen, wo ich mal davon ausgehen, das da Nicht jeder mal darüber nachgadacht hat.
und Zwar will ich einen farbverlauf.
Dieser Farbverlauf soll wie folgt ausgebaut werden
a) 5 Stufen
b) die Sufen sollen z.B. bei Rot wie folgt autimatisch errechnet werden.
1) Stufe: Ton = 0, Sättigung = 40, Wert = 100;
2) Stufe: Ton = 0, Sättigung = 70, Wert = 100;
3) Stufe: Ton = 0, Sättigung = 100, Wert = 100;
4) Stufe: Ton = 0, Sättigung = 100, Wert = 70;
5) Stufe: Ton = 0, Sättigung = 100, Wert = 40;
c) Hintergrundharbe oder Schriftfarbe spiet keine rolle.
d) wenn doch Schriftfarbe, dann auch entsprechenden Buchstaben im Farbverlauf.
Weis, das es da Schwer wird, aber dennoch sicherlich nincht unmöglich oder?
Zuletzt geändert von Maik81ftl am Do 31. Mär 2011, 12:32, insgesamt 1-mal geändert.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Farbverlauf bei label
Mit OpenGL ein Kinderspiel, per GDI ist die Positionierung von Zeichen unbequem. Ein Suchbegriff wäre DrawText().
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Farbverlauf bei label
OpenGLScotty hat geschrieben:Mit OpenGL ein Kinderspiel, per GDI ist die Positionierung von Zeichen unbequem. Ein Suchbegriff wäre DrawText().


läst sich das auf ein TLabel anwenden???
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Farbverlauf bei label
Da helfe ich doch gern:Maik81ftl hat geschrieben:OpenGLböhmisches dorf
![]()
http://wiki.lazarus.freepascal.org/OpenGL" onclick="window.open(this.href);return false;
http://wiki.lazarus.freepascal.org/OpenGL_Tutorial" onclick="window.open(this.href);return false;
http://www.friends-of-fpc.org/tutorials ... s/dlx_ogl/" onclick="window.open(this.href);return false;
http://www.delphigl.com/" onclick="window.open(this.href);return false;
http://www.lazarusforum.de" onclick="window.open(this.href);return false;
http://de.wikipedia.org/wiki/OpenGL" onclick="window.open(this.href);return false;
http://www.google.de/" onclick="window.open(this.href);return false;
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Farbverlauf bei label
Viel mehr Farben fallen mir bei TLabel als Referenz nicht ein. Da gibts nur Farben für den Hintergrund und für den Text.Maik81ftl hat geschrieben:c) Hintergrundharbe oder Schriftfarbe spiet keine rolle.
Wenn du den Farbverlauf Buchstabe für Buchstabe haben willst, ist das auch mit der LCL möglich -- du musst nur Buchstabe für Buchstabe ausmessen und zeichnen (okay, die Buchstabenzwischenräume sind dann nicht mehr so ganz optimal). Aufbauen kannst du auf dem Code in T(Custom)Label.Paint.
Alternative: Du erstellst eine Maske, indem du deinen Text auf ein Canvas malst und wendest diese dann auf ein einen Farbverlauf an. Das Ergebnis (Farbverlauf sogar buchstabenübergreifend) kannst du dann immer noch mit dem gewünschten Hintergrund kombinieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Farbverlauf bei label
Sagt doch einfach gleich, dass eine eigene Komponente erstellt werden muss. Die LCL Komponenten sind einfach zu eingeschränkt. Unter Windows könnte man die WinAPI zu Hilfe nehmen. Unter Linux wäre das jedoch nicht Optimal. Am Einfachsten wäre es eine eigene Komponente zu erstellen. Das Zeichnen der Buchstaben ist das einfachste dabei:
Mehr ist das nicht. Ok, den Automatischen Zeilen Umbruch musst du noch selbst einfügen.
Du leitest erst einmal eine Komponente von TCustomControl ab und überschreibst die Paint Methode und fügst dort das ein was ich geschrieben habe. Das musst du natürlich noch anpassen.
Beim Automatischen Zeilenumbruch musst du drauf achten, dass du wortweise umbrichst. Aber auch das wäre kein großes Problem.
Du gehst das ja Zeichenweise durch.
Wenn du meine Idee ausprobierst, wirst du merken, das es ein Problem gibt. Bei längeren Texten ist diese einfache Variante zu Langsam. Beim Aber du möchtest ja auch das jeder Buchstabe eine andere Farbe hat. Daher ist das die einzigste Möglichkeit. Wenn Buchstaben unter Umständen die gleiche Farben haben, könntest du Optimieren. Aber so nicht. Also: Bei kleineren Texten ist das wohl OK, aber bei größeren wäre das einfach zu Langsam.
Die ganze Komponente wäre relativ leicht und schnell zu erstellen. *G*.
PY ist eine Art Vorbereitung auf den Automatischen Zeilenumbruch.
Code: Alles auswählen
Meine Zeichen Methode:
px:=0; pw:=0;
for x:=1 to Lenght(Text) do begin
Canvas.Font.Color:=[Gewünschte Farbe Zuweise]
pw:=Canvas.TextWidht(text[x]);
Canvas.TextOut(px,py,text[x]);
inc(px,pw);
end;
Du leitest erst einmal eine Komponente von TCustomControl ab und überschreibst die Paint Methode und fügst dort das ein was ich geschrieben habe. Das musst du natürlich noch anpassen.
Beim Automatischen Zeilenumbruch musst du drauf achten, dass du wortweise umbrichst. Aber auch das wäre kein großes Problem.
Du gehst das ja Zeichenweise durch.
Wenn du meine Idee ausprobierst, wirst du merken, das es ein Problem gibt. Bei längeren Texten ist diese einfache Variante zu Langsam. Beim Aber du möchtest ja auch das jeder Buchstabe eine andere Farbe hat. Daher ist das die einzigste Möglichkeit. Wenn Buchstaben unter Umständen die gleiche Farben haben, könntest du Optimieren. Aber so nicht. Also: Bei kleineren Texten ist das wohl OK, aber bei größeren wäre das einfach zu Langsam.
Die ganze Komponente wäre relativ leicht und schnell zu erstellen. *G*.
PY ist eine Art Vorbereitung auf den Automatischen Zeilenumbruch.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Farbverlauf bei label
http://wiki.lazarus.freepascal.org/Spec ... ient&go=Go" onclick="window.open(this.href);return false;
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Farbverlauf bei label
ergo ein Canvas anstelle des TLabel verwenden.Socke hat geschrieben:Viel mehr Farben fallen mir bei TLabel als Referenz nicht ein. Da gibts nur Farben für den Hintergrund und für den Text.Maik81ftl hat geschrieben:c) Hintergrundharbe oder Schriftfarbe spiet keine rolle.
Wenn du den Farbverlauf Buchstabe für Buchstabe haben willst, ist das auch mit der LCL möglich -- du musst nur Buchstabe für Buchstabe ausmessen und zeichnen (okay, die Buchstabenzwischenräume sind dann nicht mehr so ganz optimal). Aufbauen kannst du auf dem Code in T(Custom)Label.Paint.
Alternative: Du erstellst eine Maske, indem du deinen Text auf ein Canvas malst und wendest diese dann auf ein einen Farbverlauf an. Das Ergebnis (Farbverlauf sogar buchstabenübergreifend) kannst du dann immer noch mit dem gewünschten Hintergrund kombinieren.
Dann bleint nur noch die Fragen, wie ich die stufen 1, 2, 4, 5 berechne. Stufe 3 ist der Grundwert, von dem aus heller und Dunkler gehen soll.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Farbverlauf bei label
Du musst nur ein anderes Farbsystem verwenden. Mir ist der Name entfallen. Ein Farbsystem wo du die Helligkeit einstellen kannst.
Eine eigene Komponente wäre jedoch "Sinnvoller", weil du sie leichter wieder verwenden kannst, Aber für den Anfang reicht natürlich auch ein Canvas bzw. eine PaintBox.
Eine eigene Komponente wäre jedoch "Sinnvoller", weil du sie leichter wieder verwenden kannst, Aber für den Anfang reicht natürlich auch ein Canvas bzw. eine PaintBox.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 292
- Registriert: Sa 5. Feb 2011, 20:38
- OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
- CPU-Target: 32Bit
- Wohnort: Wien
Re: Farbverlauf bei label
HSV (hue, saturation, value), oder? Zur Umrechnung siehe hier: http://en.wikipedia.org/wiki/HSL_and_HSV" onclick="window.open(this.href);return false;Du musst nur ein anderes Farbsystem verwenden. Mir ist der Name entfallen. Ein Farbsystem wo du die Helligkeit einstellen kannst.
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Farbverlauf bei label
Hmmm Danke für den Link ma sehen, ob ich da schlau werden. schwierig wird aber da, ...Eclipticon hat geschrieben:HSV (hue, saturation, value), oder? Zur Umrechnung siehe hier: http://en.wikipedia.org/wiki/HSL_and_HSV" onclick="window.open(this.href);return false;Du musst nur ein anderes Farbsystem verwenden. Mir ist der Name entfallen. Ein Farbsystem wo du die Helligkeit einstellen kannst.
a nur english

b Formeln, in die ich mich erst mal einarbeiten muß

Edit!
Hab hier eine RGB-Farbtabelle gefunden.
anhand der Hexwerte will ich quasi nur die stufen errechnen. Sehe aber auch schon, das dies nicht leicht werden wird. also sollt ich wohl ggf eine Samlung von ca 20 bis 30 farben vorgeben.

Edit 02!
Hier mal noch das Bild, wie es in etwa aussehen soll...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Beiträge: 292
- Registriert: Sa 5. Feb 2011, 20:38
- OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
- CPU-Target: 32Bit
- Wohnort: Wien
Re: Farbverlauf bei label
Na, irgendsowas sollte doch auch gehen (Pseudocode):
Oder? 
Code: Alles auswählen
Darkness: double // Ein wert zwischen 0 und 1
if Darkness < 0.5 then begin
Color.Red = Darkness * (255 / 0.5)
Color.Green = 0
Color.Blue = 0
end else begin
Color.Red = 255
Color.Green = (Darkness - 0.5) * (255 / 0.5)
Color.Blue = Color.Green
end

-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Farbverlauf bei label
Glaube eine Möglichkeit gefunden zu haben.
Bei der Farbe #00FF00) habe ich mal folgende Farbinfos ausgemacht.
RGB = 00, 255, 00
TSW = 120, 100, 100
wenn ich da nun denn richtigen anfang finde, sollte ich doch anhand der werte die restlichen farben rausbekommen.
bei der Farbe hab ich mitbekommen, das eine Änderung des TSW auf die werte 120, 70, 100 eine RBG Änderung auf 77, 255, 77 zur folge hat.
Dann man aus der kenntnis eine Formel schreiben??? wenn ja, wie würdet ihr den ansatz wählen?
thx erst mal für die bisherige hilfe
Maik
Bei der Farbe #00FF00) habe ich mal folgende Farbinfos ausgemacht.
RGB = 00, 255, 00
TSW = 120, 100, 100
wenn ich da nun denn richtigen anfang finde, sollte ich doch anhand der werte die restlichen farben rausbekommen.
bei der Farbe hab ich mitbekommen, das eine Änderung des TSW auf die werte 120, 70, 100 eine RBG Änderung auf 77, 255, 77 zur folge hat.
Dann man aus der kenntnis eine Formel schreiben??? wenn ja, wie würdet ihr den ansatz wählen?
thx erst mal für die bisherige hilfe
Maik
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Farbverlauf bei label
Du könntest hier mal: http://www.delphipraxis.net/" onclick="window.open(this.href);return false; dein Problem bei der Such Funktion eingeben. Die LCL hat bereits Funktionen für HSV. Damit kann man relativ leicht um rechnen.
Such einfach mal im Forum nach HSV.
Such einfach mal im Forum nach HSV.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Farbverlauf bei label
Kann man, musst du aber nicht mehr selber machen.Maik81ftl hat geschrieben:Dann man aus der kenntnis eine Formel schreiben??? wenn ja, wie würdet ihr den ansatz wählen?
Hab sie kurz herausgesucht. Unit graphutil:pluto hat geschrieben:Die LCL hat bereits Funktionen für HSV. Damit kann man relativ leicht um rechnen.
- procedure ColorToHLS(const AColor: TColor; out H, L, S: Byte);
- procedure RGBtoHLS(const R, G, B: Byte; out H, L, S: Byte);
- function HLStoColor(const H, L, S: Byte): TColor;
- procedure HLStoRGB(const H, L, S: Byte; out R, G, B: Byte);
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein