Farbverlauf bei Canvas

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Maik81ftl
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

Beitrag von Maik81ftl »

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?
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 :D und der Kreis Segeberg meine LIEBE :D

Scotty
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

Beitrag von Scotty »

Mit OpenGL ein Kinderspiel, per GDI ist die Positionierung von Zeichen unbequem. Ein Suchbegriff wäre DrawText().

Maik81ftl
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

Beitrag von Maik81ftl »

Scotty hat geschrieben:Mit OpenGL ein Kinderspiel, per GDI ist die Positionierung von Zeichen unbequem. Ein Suchbegriff wäre DrawText().


OpenGL :?: böhmisches dorf :!:

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

Scotty
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

Beitrag von Scotty »


Socke
Lazarusforum e. V.
Beiträge: 3158
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

Beitrag von Socke »

Maik81ftl hat geschrieben:c) Hintergrundharbe oder Schriftfarbe spiet keine rolle.

Viel mehr Farben fallen mir bei TLabel als Referenz nicht ein. Da gibts nur Farben für den Hintergrund und für den Text.

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

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Farbverlauf bei label

Beitrag von pluto »

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:

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;

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.
MFG
Michael Springwald


Maik81ftl
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

Beitrag von Maik81ftl »

Socke hat geschrieben:
Maik81ftl hat geschrieben:c) Hintergrundharbe oder Schriftfarbe spiet keine rolle.

Viel mehr Farben fallen mir bei TLabel als Referenz nicht ein. Da gibts nur Farben für den Hintergrund und für den Text.

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.


ergo ein Canvas anstelle des TLabel verwenden.

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 :D und der Kreis Segeberg meine LIEBE :D

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Farbverlauf bei label

Beitrag von pluto »

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.
MFG
Michael Springwald

Eclipticon
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

Beitrag von Eclipticon »

Du musst nur ein anderes Farbsystem verwenden. Mir ist der Name entfallen. Ein Farbsystem wo du die Helligkeit einstellen kannst.


HSV (hue, saturation, value), oder? Zur Umrechnung siehe hier: http://en.wikipedia.org/wiki/HSL_and_HSV

Maik81ftl
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

Beitrag von Maik81ftl »

Eclipticon hat geschrieben:
Du musst nur ein anderes Farbsystem verwenden. Mir ist der Name entfallen. Ein Farbsystem wo du die Helligkeit einstellen kannst.


HSV (hue, saturation, value), oder? Zur Umrechnung siehe hier: http://en.wikipedia.org/wiki/HSL_and_HSV


Hmmm Danke für den Link ma sehen, ob ich da schlau werden. schwierig wird aber da, ...

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...
Dateianhänge
Bildschirmfoto.png
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Eclipticon
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

Beitrag von Eclipticon »

Na, irgendsowas sollte doch auch gehen (Pseudocode):

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


Oder? ;-)

Maik81ftl
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

Beitrag von Maik81ftl »

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
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Farbverlauf bei label

Beitrag von pluto »

Du könntest hier mal: http://www.delphipraxis.net/ 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.
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3158
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

Beitrag von Socke »

Maik81ftl hat geschrieben:Dann man aus der kenntnis eine Formel schreiben??? wenn ja, wie würdet ihr den ansatz wählen?

Kann man, musst du aber nicht mehr selber machen.
pluto hat geschrieben:Die LCL hat bereits Funktionen für HSV. Damit kann man relativ leicht um rechnen.

Hab sie kurz herausgesucht. Unit graphutil:
  • 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);
Dort wird nur mit den englischen Worten Hue, Luminance und Saturation gearbeitet (gleichbedeutend mit HSV oder TSW)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten