Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
Delphi 12 Athens
|
Re: farbverlauf in %
31. Jan 2009, 21:59
wenn du unbedingt über 3 Farben gehen willst, dann mußt du die Berechnung teilen
0%-50% Farbe1 > Farbe2
50-100% Farbe2 > Farbe2
aber Rot + Grün ergibt doch Gelb.
also sollte der Farbverlauf von Rot nach Grün auch über Gelb gehen?
(es sei denn ich hab mich verrechnet)
OK, 50% Rot + 50% Grün = 50% Gelb = dunkelgelb
Farbe = RGB(255 * Min(Prozent, 50) div 50, 255 * Min(100 - Prozent, 50) div 50, 0);
Delphi-Quellcode:
// eine Form mit Memo1:TMemo und Image1:TImage (.Stretch=true)
Procedure TForm1.FormCreate(Sender: TObject);
Var Prozent: Integer;
Begin
Image1.Picture.Bitmap.Width := 101;
Image1.Picture.Bitmap.Height := 8;
// jede Farbe gleichmäßig über den gesamten Bereich verteilt
For Prozent := 0 to 100 do Begin
Memo1.Lines.Add(Format(' %d R:%d G:%d F1:$%.8x F2:$%.8x', [Prozent,
{red}255 * Prozent div 100,
{grün}255 * (100 - Prozent) div 100,
{red}(255 * Prozent div 100) or {grün}(255 * (100 - Prozent) div 100 * $0100),
RGB(255 * Prozent div 100, 255 * (100 - Prozent) div 100, 0)]));
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 0] :=
RGB(255 * Prozent div 100, 255 * (100 - Prozent) div 100, 0);
End;
Memo1.Lines.Add(' ');
// jede Farbe nur über den halben Bereich verteilt
For Prozent := 0 to 100 do
If Prozent <= 50 Then Begin
Memo1.Lines.Add(Format(' %d R:%d G:%d F1:$%.8x F2:$%.8x', [Prozent,
{red}255 * Prozent div 50,
{grün}255,
{red}(255 * Prozent div 50) or {grün}(255 * $0100),
RGB(255 * Prozent div 50, 255, 0)]));
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 3] :=
RGB(255 * Prozent div 50, 255, 0);
End Else Begin
Memo1.Lines.Add(Format(' %d R:%d G:%d F1:$%.8x F2:$%.8x', [Prozent,
{red}255,
{grün}255 * (100 - Prozent) div 50,
{red}(255) or {grün}(255 * (100 - Prozent) div 50 * $0100),
RGB(255, 255 * (100 - Prozent) div 50, 0)]));
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 3] :=
RGB(255, 255 * (100 - Prozent) div 50, 0);
End;
Memo1.Lines.Add(' ');
// jede Farbe nur über den halben Bereich verteilt - zusammengefaßt
For Prozent := 0 to 100 do Begin
Memo1.Lines.Add(Format(' %d R:%d G:%d F1:$%.8x F2:$%.8x', [Prozent,
{red}255 * Min(Prozent, 50) div 50,
{grün}255 * Min(100 - Prozent, 50) div 50,
{red}(255 * Min(Prozent, 50) div 50) or {grün}(255 * Min(100 - Prozent, 50) div 50 * $0100),
RGB(255 * Min(Prozent, 50) div 50, 255 * Min(100 - Prozent, 50) div 50, 0)]));
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 6] :=
RGB(255 * Min(Prozent, 50) div 50, 255 * Min(100 - Prozent, 50) div 50, 0);
End;
For Prozent := 0 to 100 do Begin
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 1] := Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 0];
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 2] := Self.Color;
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 4] := Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 3];
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 5] := Self.Color;
Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 7] := Image1.Picture.Bitmap.Canvas.Pixels[Prozent, 6];
End;
End;
(*
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 505
ClientWidth = 337
OnCreate = FormCreate
object Image1: TImage
Left = 8
Top = 424
Width = 321
Height = 73
Anchors = [akRight, akBottom]
Stretch = True
end
object Memo1: TMemo
Left = 8
Top = 8
Width = 321
Height = 410
Anchors = [akLeft, akTop, akRight, akBottom]
ScrollBars = ssBoth
end
end
*)
aber wie gesagt, alles nur ein bissl Mathematik ... hätt man sich auch selbst ausrechen können, bzw. selbst die passenden Formeln erstellen können
$2B or not $2B
|