Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Alphablend bei Farben (https://www.delphipraxis.net/87116-alphablend-bei-farben.html)

Neutral General 23. Feb 2007 14:14


Alphablend bei Farben
 
Hi,

Also ich will keine ganzen Bitmaps aufeinander blenden sondern nur zwei TColors... Also sowas in der Art wie:

Delphi-Quellcode:
function Alpha(C1,C2: TColor; Alpha: Byte): TColor;
wobei C2 auf C1 geblendet werden soll mit dem "Alpha"-Wert.

Gibts sowas ? :|
Habs bisher so gemacht das ich zwei mini-Bitmaps übereinander geblendet habe mit den jeweiligen Farben und Alphawerten und dann

Delphi-Quellcode:
Result := Bitmap1.Canvas.Pixels[0,0];
Aber das ist -->ARSCH<-- langsam :wall:

Wäre über ne gute Lösung dankbar :)

Gruß
Neutral General

elundril 23. Feb 2007 14:18

Re: Alphablend bei Farben
 
R1+R2/2
G1+G2/2
B1+B2/2

denk ich! hab ich mal auf einer seite gesehen.

lg el

Neutral General 23. Feb 2007 14:20

Re: Alphablend bei Farben
 
Zitat:

Zitat von elundril
R1+R2/2
G1+G2/2
B1+B2/2

denk ich! hab ich mal auf einer seite gesehen.

lg el

Und wie stellt man dabei die Transparenz ein ? :mrgreen:

Nicolai1234 23. Feb 2007 14:21

Re: Alphablend bei Farben
 
Zitat:

Zitat von Neutral General
Zitat:

Zitat von elundril
R1+R2/2
G1+G2/2
B1+B2/2

denk ich! hab ich mal auf einer seite gesehen.

lg el

Und wie stellt man dabei die Transparenz ein ? :mrgreen:

(A*R1+(255-A)*R2)/255

Dann könntest du den Alphawert ganz normal von 0 bis 255 regeln...

elundril 23. Feb 2007 14:24

Re: Alphablend bei Farben
 
SRY!!! habs falsch verstanden. :oops: aber das hab ich auch schon mal irgendwo gelesen! :gruebel:

lg el

SirThornberry 23. Feb 2007 14:50

Re: Alphablend bei Farben
 
anstelle von
(255-A)
geht auch
not(A)

Neutral General 23. Feb 2007 14:55

Re: Alphablend bei Farben
 
Zitat:

Zitat von SirThornberry
anstelle von
(255-A)
geht auch
not(A)

Da bekomme ich falsche Farben...

SirThornberry 23. Feb 2007 15:16

Re: Alphablend bei Farben
 
Dann ist dein A nicht vom Type Byte

Neutral General 23. Feb 2007 15:34

Re: Alphablend bei Farben
 
Zitat:

Zitat von SirThornberry
Dann ist dein A nicht vom Type Byte

ups :mrgreen:

Delphi-Quellcode:
const
  COLOR_GROUND   = TColor($00004080);
  COLOR_GROUND_R = Byte(COLOR_GROUND);
  COLOR_GROUND_G = Byte(COLOR_GROUND shr 8);
  COLOR_GROUND_B = Byte(COLOR_GROUND shr 16);

function TTile.GetAlphaColorValue(Current,Max: Word): TColor;
var p: Single;
    r,g,b: Byte;
    i: Byte;
begin
  p:= Current / Max;
  p:= p*255;
  i:= round(p);

  r:= GetRValue(FBColor);
  g:= GetGValue(FBColor);
  b:= GetBValue(FBColor);

  RGB((i*R+(not i)*COLOR_GROUND_R) div 255,
      (i*G+(not i)*COLOR_GROUND_G) div 255,
      (i*B+(not i)*COLOR_GROUND_B) div 255);
end;
So. Das ist im Moment meine Function. Die funktioniert auch, ABER das muss schneller!

Weil:

Delphi-Quellcode:
procedure TForm1.PaintMap;
var x,y: Integer;
    P: PRGBTriple;
begin
    for y:= 0 to High(FMap) do
    begin
      P := FBitmap.ScanLine[y];
      for x:= 0 to High(FMap[y]) do
      begin
        P^.rgbtRed  := GetRValue(FMap[y,x].Color); // Der Setter von Color ruft GetAlphaColorValue auf
        P^.rgbtGreen := GetGValue(FMap[y,x].Color);
        P^.rgbtBlue := GetBValue(FMap[y,x].Color);
        inc(P);
      end;
    end;
    Image1.Picture.Bitmap.Assign(FBitmap);
end;
Und wenn ich so ein 1024*768 Bild male dann dauert das (fast) ne halbe Sekunde.. aber ich will das Bild mindestens jede halbe Sekunde malen *g*. Wie kann man das ganze am besten optimieren?

Gruß
Neutral General

SirThornberry 24. Feb 2007 00:48

Re: Alphablend bei Farben
 
ich denke die meiste Zeit geht in der Zeile verloren:
Delphi-Quellcode:
Image1.Picture.Bitmap.Assign(FBitmap);
hast du mal geprüft wie lange diese Funktion benötigt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Seite 1 von 2  1 2      

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