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

Re: Farbverlauf bei label

Beitrag von Maik81ftl »

Socke hat geschrieben:
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)


Danke Socke für die Functionen.

Dank dieser habe ich die die werte beommen, welche ich nun nur noch sinnvoll auswerten muß.
  • {Rot
  • // $9191FF; H:0; L:200; S:255 | R:137; G:128; B:255
  • // $4D4DFF; H:0; L:166; S:255 | R:143; G:128; B:255
  • // clRed; H:0; L:128; S:255 | R:149; G:128; B:255 <--- Grundfarbe
  • // $0000B3; H:0; L: 90; S:255 | R:155; G:128; B:255
  • // $000066; H:0; L: 51; S:255 | R:162; G:128; B:255}
  • {Grün
  • // $99FF99; H: 85; L:204; S:255 | R:140; G:170; B:255
  • // $4DFF4D; H: 85; L:166; S:255 | R:150; G:170; B:255
  • // clLime; H: 85; L:128; S:255 | R:160; G:170; B:255 <--- Grundfarbe
  • // $00B300; H: 85; L: 90; S:255 | R:169; G:170; B:255
  • // $006600; H: 85; L: 51; S:255 | R:177; G:153; B:255}

Die werte Oberhalb und unterhalb der Grundfarbe ist nun genau das, wo ich arg rechnen werden muß. Würde der Wert $006600; H: 85; L: 51; S:255 | R:177; G:153; B:255 nich aus der rolle fallen, wäre es ein leichtes. :D
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 Canvas

Beitrag von pluto »

Damit müsstest du die Gewünschte Funktion erstellen können. Schön wäre es jedoch, wenn du daraus eine Komponente machen würdest. So, könntest du sie leicht wiederverwenden und andere könnten sie auch verwenden.
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 Canvas

Beitrag von Maik81ftl »

pluto hat geschrieben:Damit müsstest du die Gewünschte Funktion erstellen können. Schön wäre es jedoch, wenn du daraus eine Komponente machen würdest. So, könntest du sie leicht wiederverwenden und andere könnten sie auch verwenden.


Du meinen ein Image mit Farbverlauf??? suber idee...

landet denne hier und bei der DP im forum...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Farbverlauf bei Canvas

Beitrag von MAC »

ein image mit farbverlauf: grandient mäßig ? da gibt es 2 units - eine objektorientierte und eine improvisiert nicht objekt-orientiert...
meinst du das ?

Code: Alles auswählen

Signatur := nil;

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 Canvas

Beitrag von pluto »

Du meinen ein Image mit Farbverlauf??? suber idee...
landet denne hier und bei der DP im forum...

Nein, sowas meine ich nicht. Ich meinte eine eigene Komponente. Jede Komponente stellt ein Canvas-Objekt zu Verfügung. Das könntest du nutzen. Du könntest auch ein intern Buffer verwenden. Wenn du möchtest.
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 Canvas

Beitrag von Maik81ftl »

pluto hat geschrieben:
Du meinen ein Image mit Farbverlauf??? suber idee...
landet denne hier und bei der DP im forum...

Nein, sowas meine ich nicht. Ich meinte eine eigene Komponente. Jede Komponente stellt ein Canvas-Objekt zu Verfügung. Das könntest du nutzen. Du könntest auch ein intern Buffer verwenden. Wenn du möchtest.


Hmmm denne bestimmt a TLabel auf dem TImage :?: geht auch sehr gut. und da hab i das Problem mit der Schriftgröße net.
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 Canvas

Beitrag von pluto »

Hmmm denne bestimmt a TLabel auf dem TImage :?: geht auch sehr gut. und da hab i das Problem mit der Schriftgröße net.

Nein. Das meine ich auch nicht. Ich meine das was ich bis jetzt geschrieben habe. Hier mal eine Schritt für Schritt Anleitung:
1. Du erstellt dir eine neue Unit
2. Du Fügst dort in die Uses List die unit controlls hinzu
3. Jetzt erstellst du eine Klasse: du gibst dazu classc ein und drückst strg+j und dann enter. Es wird ein Fertiger Klassen Header geschrieben. Diese Klasse leitest du von TCustomControl ab(= CustomControl)
4. Im Public Bereich gibt du Paint ein und drückst strg+leertaste. Dort müsst eine List kommen wo du Enter drückst. Achte darauf das die Methode mit overrhide beendet wird(Das sagt, dass du die Methode überschreiben möchtest. Jetzt drückst du umschalt+strg+c, die Methode müsste Angelegt werden, wenn nicht, musst du das selbst machen oder nach schauen, wie bei dir die Tastenkombination dazu ist.
5. Du fügst eine Eigenschaft(Property) in Published hinzu: property Text:String read fText write SetText; und drückst wieder strg+c. Die Methode SetText sollte dabei Automatisch Angelegt werden.
6. Die Komponente stellt ein eigenen Canvas zu Verfügung: Den Kannst du nutzen, z.b. so:

Code: Alles auswählen

...
px:=0; py:=0;
for x:=1 to Lenght(Text)+1 do begin
  // Nun kannst du die Farbe bei allen Buchstaben im Text ändern, z.b. so:
  Canvas.Font.Color:=RGB(Random(255),Random(255),Random(255)); // Kann sein, dass du erst eine Unit einbinden musst für RGB. Entweder LCLInft oder LCLProc.
  Canvas.TextOut(px,py,Text[x]);
  px:=px+Canvas.TextWidht(Text[x]); // Kann sein das ich TextWidht Falsch geschrieben habe, einfach strg+c bei Text Eingeben. 
end; // for x
...

Ich hoffe du kannst damit etwas Anfangen.

Zum Verbessern: Du könntest wenn alles läuft, dafür sorgen das nicht bei jedem neu Zeichnen auch neu Gerendert wird. Das Spart CPU-Zeit. Damit meine ich nicht DoubleBuffer sondern, wenn das Fenster nicht den Focus hat, könntest du z.b. einmal in ein Buffer Zeichnen(Von Typ TBitMap) und dann aus diese Buffer Kopieren. Oder du könntest es so machen: Wenn keine Änderungen bei den Farben oder Text vorgenommen wurden, dass du immer aus den Buffer Zeichnest. Ob das bei einem kleinen Text einen Sinn macht, weiß ich nicht.
MFG
Michael Springwald

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Farbverlauf bei Canvas

Beitrag von baba »

pluto hat geschrieben:
Hmmm denne bestimmt a TLabel auf dem TImage :?: geht auch sehr gut. und da hab i das Problem mit der Schriftgröße net.

Nein. Das meine ich auch nicht. Ich meine das was ich bis jetzt geschrieben habe. Hier mal eine Schritt für Schritt Anleitung:
1. Du erstellt dir eine neue Unit
2. Du Fügst dort in die Uses List die unit controlls hinzu
3. Jetzt erstellst du eine Klasse: du gibst dazu classc ein und drückst strg+j und dann enter. Es wird ein Fertiger Klassen Header geschrieben. Diese Klasse leitest du von TCustomControl ab(= CustomControl)
4. Im Public Bereich gibt du Paint ein und drückst strg+leertaste. Dort müsst eine List kommen wo du Enter drückst. Achte darauf das die Methode mit overrhide beendet wird(Das sagt, dass du die Methode überschreiben möchtest. Jetzt drückst du umschalt+strg+c, die Methode müsste Angelegt werden, wenn nicht, musst du das selbst machen oder nach schauen, wie bei dir die Tastenkombination dazu ist.
5. Du fügst eine Eigenschaft(Property) in Published hinzu: property Text:String read fText write SetText; und drückst wieder strg+c. Die Methode SetText sollte dabei Automatisch Angelegt werden.
6. Die Komponente stellt ein eigenen Canvas zu Verfügung: Den Kannst du nutzen, z.b. so:

Code: Alles auswählen

...
px:=0; py:=0;
for x:=1 to Lenght(Text)+1 do begin
  // Nun kannst du die Farbe bei allen Buchstaben im Text ändern, z.b. so:
  Canvas.Font.Color:=RGB(Random(255),Random(255),Random(255)); // Kann sein, dass du erst eine Unit einbinden musst für RGB. Entweder LCLInft oder LCLProc.
  Canvas.TextOut(px,py,Text[x]);
  px:=px+Canvas.TextWidht(Text[x]); // Kann sein das ich TextWidht Falsch geschrieben habe, einfach strg+c bei Text Eingeben. 
end; // for x
...

Ich hoffe du kannst damit etwas Anfangen.

Zum Verbessern: Du könntest wenn alles läuft, dafür sorgen das nicht bei jedem neu Zeichnen auch neu Gerendert wird. Das Spart CPU-Zeit. Damit meine ich nicht DoubleBuffer sondern, wenn das Fenster nicht den Focus hat, könntest du z.b. einmal in ein Buffer Zeichnen(Von Typ TBitMap) und dann aus diese Buffer Kopieren. Oder du könntest es so machen: Wenn keine Änderungen bei den Farben oder Text vorgenommen wurden, dass du immer aus den Buffer Zeichnest. Ob das bei einem kleinen Text einen Sinn macht, weiß ich nicht.


... schönes Ding. Du solltest mal daran denken zu diesem Thema ein Tutorial zu schreiben Pluto.

Baba.

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 Canvas

Beitrag von pluto »

MFG
Michael Springwald

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Farbverlauf bei Canvas

Beitrag von baba »

pluto hat geschrieben:Habe ich schon *G*:
http://wiki.freepascal.org/Building_components_01/de


... Respekt! - Da hat Maik ja schon fast genau das was er hier sucht.

Baba.

Antworten