AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TColor gewichtet mischen
Thema durchsuchen
Ansicht
Themen-Optionen

TColor gewichtet mischen

Ein Thema von ulrich.b · begonnen am 22. Dez 2006 · letzter Beitrag vom 22. Dez 2006
Antwort Antwort
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#1

TColor gewichtet mischen

  Alt 22. Dez 2006, 12:38
Hallo!

Ich suche nach einer Funktion, die GEWICHTET zwei TColor Werte mischt.
Ich habe eine Funktion selbst gestrickt, die die Farben gewichtet addiert. Was haltet ihr davon? Die Funktion arbeitet nämlich nicht immer so wie ich es erwarte (die Zeilfarbe)....

Verbesserungsvorschäge????

Delphi-Quellcode:
type
  TColorRec = packed record
    case Integer of
      0: (Value: Longint);
      1: (Red, Green, Blue: Byte);
      2: (R, G, B, Flag: Byte);
  end;

// ....

function ColorAdd(C1: TColor; C2: TColor; WC1: Byte): TColor;
var
  Color1Rec: TColorRec;
  Color2Rec: TColorRec;

begin
  Color1Rec.Value := ColorToRGB(C1);
  Color2Rec.Value := ColorToRGB(C2);

  Result := 0;

  TColorRec(Result).R := EnsureRange((Color1Rec.R*WC1 + Color2Rec.R*($FF-WC1)) div $FF, 0, $FF);
  TColorRec(Result).G := EnsureRange((Color1Rec.G*WC1 + Color2Rec.G*($FF-WC1)) div $FF, 0, $FF);
  TColorRec(Result).B := EnsureRange((Color1Rec.B*WC1 + Color2Rec.B*($FF-WC1)) div $FF, 0, $FF);
end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: TColor gewichtet mischen

  Alt 22. Dez 2006, 13:00
Also ich habe das so gelöst:
Delphi-Quellcode:
Function MergeColors (C0,C1 : TColor; I,N : Integer) : TColor;
Begin
  If N=1 Then
    Result := c0
  Else
    Result := RGB (
         (GetRValue(c1)*I + GetRValue(c0)*(N-I)) div n,
         (GetGValue(c1)*I + GetGValue(c0)*(N-I)) div n,
         (GetBValue(c1)*I + GetBValue(c0)*(N-I)) div n
       );
end;
Aufruf mit (z.B.):
Mischfarbe := MergeColors (Color1, Color2, 7,10); Die Mischfarbe wird aus 7 Teilen Color1 und 3 Teilen Color2 gemischt (7+3=10). Ob das dem physionomischen (oder wie das heisst) Farbempfinden entspricht, weiss ich nicht, aber mir reicht es.

Delphi-Quellcode:
MergeColors (C1,C2,0,N); // Liefert C2
MergeColors (C1,C2,N,N); // Liefert C1
Es ist ja eigentlich die gleiche Lösung.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#3

Re: TColor gewichtet mischen

  Alt 22. Dez 2006, 15:53
Zitat von alzaimar:
Es ist ja eigentlich die gleiche Lösung.
Ja stimmt meine Funktion ist die selbe mit fixem N=256.

Aber trotzdem danke!
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:15 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