AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RGB-Farben ändern ?

Ein Thema von Hansa · begonnen am 24. Nov 2003 · letzter Beitrag vom 25. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

RGB-Farben ändern ?

  Alt 24. Nov 2003, 20:41
Hi,

ich habe hier eine bestimmte Farbe, die soll als Farbe so bleiben, aber heller oder dunkler. Deshalb nehme ich an, alle 3 Werte verändern zu müssen. Nur, wie setzen die sich zusammen ? Hat da jemand ein Beispiel ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 20:47
Hi!

Da gibts bestimmt noch was tolleres, aber mal als Ansatz:

http://selfhtml.teamone.de/diverses/...alette_216.htm


Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 21:20
Das ist doch schon mal was. Der Zusammenhang war mit anderen Farbtabellen nicht so erkennbar. *freu* Ist es richtig, daß jeweils 2 Hex-Stellen für R,G und B stehen ? Insofern bräuchte ich ja nur alle drei gleichmäßig zu verringern oder erhöhen, für heller oder dunkler ? Nun ja, ich bin leider kein Maler.
Gruß
Hansa
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#4

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 21:36
RGB ist glaub ich additive Farbmischung,
somit müßte eigentlich das Verhältnis der drei Komponenten zueinander gleich
bleiben, und nicht um gleiche Werte modifiziert werden.

Czapie.
Was man zu verstehen gelernt hat, fürchtet man nicht mehr.
(Marie Curie)
http://www.cafes-in-berlin.com
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 21:46
Diese Tabelle befasst sich halt nur mit den sicheren Webfarben!
Aber bei den Grauwerten war es irgenwie so:

#ffffff // weiß
#eeeeee // hell
#dddddd //dunkler
#cccccc //dunkler
#bbbbbb //dunkler
#aaaaaa //dunkler
#666666 // dunkler
#555555 //dunkler
[...]
#000000 schwarz


Geht man davon aus, dass #0000FF helles blau ist, dann wird es dunkler, wenn man die FF runterschraubt bis schließlich 11 (Eins,eins = kaum noch erkennbar blau, fast schwarz).

Wenn ich nicht irre sind die RGB-Farben ja so

1.+2. Stelle Rot-Anteil
3.+4. Stelle Grün-Anteil
5.+6. Stelle Blau-Anteil

Anhand der genannten Farb-Tabelle sieht man ja einige weitere Farben und kann die dann wieder nach dem oben beschriebenen System abschwächen!

Hoffe das hilft mal!

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 21:49
Hi,

ja die Mischung von rot, grün und blau. Wenn ich jetzt von jedem die Intensität verringere, so ist die Farbe nicht so hell ansonsten aber gleich. Das muß nur gleichmäßig geschehen und nicht nur von einem Wert, das ergäbe tatsächlich eine andere Farbe. Nimmt man die drei Grundfarben und mischt diese in einem Eimer, so wird es schwarz. Beim Sonnenlicht ist es dann weiß. 8) Wie heißt noch der Begriff ?

Nun aber noch eine Frage : wie kann ich mit dem Kram so eine Art gestaffelte Schattierungstabelle basteln ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 21:50
Delphi-Quellcode:
Var R, G, B: Byte;
  Farbe: TColor;
  HD: ShortInt; { -100..0 = dunkler }
                 {  0..100 = heller  }

R := (Farbe and $000000FF);
G := (Farbe and $0000FF00) shr 8;
B := (Farbe and $00FF0000) shr 16;

If HD < 0 Then Begin
  R := R + (R * HD div 100);
  G := G + (G * HD div 100);
  B := B + (B * HD div 100);
End Else Begin
  R := R + ((255 - R) * HD div 100);
  G := G + ((255 - G) * HD div 100);
  B := B + ((255 - B) * HD div 100);
End;

{Farbe := R or (G shl 8) or (B shl 16);}
Farbe := RGB(R, G, B);
Angaben ohne Gewähr


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: RGB-Farben ändern ?

  Alt 24. Nov 2003, 21:52
Hi!

Was meinst du mit gestaffelter Farbtabelle genau? Wie willst du die ausgeben?
So als Tipp ohne Hintergrund , nimm ein Array und orde die Element nach Helligkeit an, also FF, EE, DD, CC usw. und "misch" sie dann zusammen!

Also
#0000+ARRAY[0]
#0000+ARRAY[1] dunkler

usw!

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: RGB-Farben ändern ?

  Alt 25. Nov 2003, 02:04
Ich habe das jetzt mal umgesetzt. Mit 2 Buttons soll die Color der Form verändert werden (heller/dunkler) :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    R, G, B: Byte;
    Farbe: TColor;
    HD: ShortInt; { -100..0 = dunkler }
                   {  0..100 = heller  }

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  hd := -10;
  farbe := Color;
  R := (Farbe and $000000FF);
  G := (Farbe and $0000FF00) shr 8;
  B := (Farbe and $00FF0000) shr 16;

  R := R + (R * HD div 100);
  G := G + (G * HD div 100);
  B := B + (B * HD div 100);

{Farbe := R or (G shl 8) or (B shl 16);}
  Farbe := RGB(R, G, B);
  color := farbe;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  hd := 10;
  farbe := Color;
  R := (Farbe and $000000FF);
  G := (Farbe and $0000FF00) shr 8;
  B := (Farbe and $00FF0000) shr 16;

  R := R + ((255 - R) * HD div 100);
  G := G + ((255 - G) * HD div 100);
  B := B + ((255 - B) * HD div 100);
  Farbe := RGB(R, G, B);
  color := farbe;
End;

end.
Leider geht es so nicht. Erstens verstehe ich nicht genau, wozu die Variable hd gedacht ist. In der Praxis stört mich aber am meisten, daß sich bei abwechselnder Betätigung der heller/dunkler Buttons die Farben nicht mehr zurück stellen lassen, so wie sie vorher waren.

Mein Gespür, welches allerding nicht immer funktioniert meint zu dem Source, daß da etwas mit dem SHR und dem DIV nicht richtig ist. Werden da nicht HEX und Dezimaloperationen durcheinander gewirbelt
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#10

Re: RGB-Farben ändern ?

  Alt 25. Nov 2003, 02:34
Mit ColorToRGB sollten natürlich vorher die Farbwerte der Farbpalette in RGB umgewandelt werden
clBtnFace ist zum beispiel kein RGB Wert, sondern verweißt auf einen Farbwert in der Systempalette.

Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
    Button1: TButton;
    Button2: TButton;
    Procedure Button1Click(Sender: TObject);
    Procedure Button2Click(Sender: TObject);
  End;

  Var Form1: TForm1;

Implementation
  {$R *.dfm}

  Procedure TForm1.Button1Click(Sender: TObject);
    Var R, G, B: Byte;
      Farbe: TColor;
      HD: ShortInt; { -100..0 = dunkler / 0..100 = heller  }

    Begin
      HD := -10;
      Farbe := ColorToRGB(Color);
      R := (Farbe and $000000FF);
      G := (Farbe and $0000FF00) shr 8;
      B := (Farbe and $00FF0000) shr 16;
      R := R + (R * HD div 100);
      G := G + (G * HD div 100);
      B := B + (B * HD div 100);
      Color := RGB(R, G, B);
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var R, G, B: Byte;
      Farbe: TColor;
      HD: ShortInt; { -100..0 = dunkler / 0..100 = heller  }

    Begin
      HD := 10;
      Farbe := ColorToRGB(Color);
      R := (Farbe and $000000FF);
      G := (Farbe and $0000FF00) shr 8;
      B := (Farbe and $00FF0000) shr 16;
      R := R + ((255 - R) * HD div 100);
      G := G + ((255 - G) * HD div 100);
      B := B + ((255 - B) * HD div 100);
      Color := RGB(R, G, B);
    End;

End.
HD gibt die starke der Änderung an.



http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 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