whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

33 Visitors Online


 
...get the transparency color?
Autor: André Fritzsche
[ Print tip ]  

Tip Rating (5):  
     


interface
{------------------------------------------------------------------------------}

uses
  
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{------------------------------------------------------------------------------}
//Hilfsfunktion zum Auslesen eines Bytes aus TColor
//Value gibt die Farbe an
//Shift gibt die Anzahl der zu schiebenden Bits an
//Bsp: um aus Value=$00120000 das Rot-Byte auszulesen, muss Shift den Wert 16 haben
//     ($12 wird dann zurückgegeben
function GetByte(Value : TColor; Shift : byte): byte;
  {------------------------------------------------------------------------------}
  //Hilfsprozedur zum Auslesen des Rot-,Grün- und Blauwertes aus TColor
  //nutzt GetByte
procedure ColorToRGB(Color : TColor; var R, G, B : byte);
  {------------------------------------------------------------------------------}
  //Hilfsfunckion zum Erstellen eines TColor aus Rot-,Grün- und Blauwerten
function RGBToColor(R, G, B : byte): TColor;
  {------------------------------------------------------------------------------}
  //Eigentliche Transparenzfunktion, ermittelt die Transparenzfarbe des transparenten
  //Vordergrunds, wenn Hintergrundfarbe=BGColor und Vordergrundfarbe=FRColor ist
  //TranspValue gibt den Ganzzahligen Prozentsatz des Transparenzwertes an
function TransparencyColor(BGColor, FRColor : TColor; TranspValue : byte): TColor;
  {------------------------------------------------------------------------------}

implementation

function 
GetByte(Value : TColor; Shift : byte): byte;
begin
  
Result := (Value and ($FF shl Shift)) shr Shift;
  //Byte an entsprechender Stelle maskieren und dann nach Rechts verschieben
end;
{------------------------------------------------------------------------------}

procedure ColorToRGB(Color : TColor; var R, G, B : byte);
begin
  
R := GetByte(Color, 16); //zweites Byte aus Color (v.R.)
  
G := GetByte(Color, 8);  //drittes Byte aus Color (v.R.)
  
B := GetByte(Color, 0);  //viertes Byte aus Color (v.R.)
end;
{------------------------------------------------------------------------------}

function RGBToColor(R, G, B : byte): TColor;
begin
  
Result := ((R and $FF) shl 16) +
    ((G and $FF) shl 8) + (B and $FF);
end;
{------------------------------------------------------------------------------}

function TransparencyColor(BGColor, FRColor : TColor; TranspValue : byte): TColor;
var 
  
BGR, BGG, BGB, FRR, FRG, FRB, ergR, ergG, ergB : byte;
  TrFact : real;
begin
  
//Transparenzfaktor errechnen
  
TrFact := TranspValue / 100;

  //Hinter- und Vordergrundfarbe in Rot-,Grün- und Blauwerte splitten
  
ColorToRGB(BGColor, BGR, BGG, BGB);
  ColorToRGB(FRColor, FRR, FRG, FRB);

  //Ergebnisfarbwerte errechnen
  
ergR := byte(Trunc(BGR * TrFact + FRR * (1 - TrFact)));
  ergG := byte(Trunc(BGG * TrFact + FRG * (1 - TrFact)));
  ergB := byte(Trunc(BGB * TrFact + FRB * (1 - TrFact)));

  //Rot-,Grün- und Blauwert zu TColor und zurückgeben
  
Result := RGBToColor(ErgR, ergG, ergB);
end;
{------------------------------------------------------------------------------}

 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners