![]() |
Alphablend bei Farben
Hi,
Also ich will keine ganzen Bitmaps aufeinander blenden sondern nur zwei TColors... Also sowas in der Art wie:
Delphi-Quellcode:
wobei C2 auf C1 geblendet werden soll mit dem "Alpha"-Wert.
function Alpha(C1,C2: TColor; Alpha: Byte): TColor;
Gibts sowas ? :| Habs bisher so gemacht das ich zwei mini-Bitmaps übereinander geblendet habe mit den jeweiligen Farben und Alphawerten und dann
Delphi-Quellcode:
Aber das ist -->ARSCH<-- langsam :wall:
Result := Bitmap1.Canvas.Pixels[0,0];
Wäre über ne gute Lösung dankbar :) Gruß Neutral General |
Re: Alphablend bei Farben
R1+R2/2
G1+G2/2 B1+B2/2 denk ich! hab ich mal auf einer seite gesehen. lg el |
Re: Alphablend bei Farben
Zitat:
|
Re: Alphablend bei Farben
Zitat:
Dann könntest du den Alphawert ganz normal von 0 bis 255 regeln... |
Re: Alphablend bei Farben
SRY!!! habs falsch verstanden. :oops: aber das hab ich auch schon mal irgendwo gelesen! :gruebel:
lg el |
Re: Alphablend bei Farben
anstelle von
(255-A) geht auch not(A) |
Re: Alphablend bei Farben
Zitat:
|
Re: Alphablend bei Farben
Dann ist dein A nicht vom Type Byte
|
Re: Alphablend bei Farben
Zitat:
Delphi-Quellcode:
So. Das ist im Moment meine Function. Die funktioniert auch, ABER das muss schneller!
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; Weil:
Delphi-Quellcode:
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?
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; Gruß Neutral General |
Re: Alphablend bei Farben
ich denke die meiste Zeit geht in der Zeile verloren:
Delphi-Quellcode:
hast du mal geprüft wie lange diese Funktion benötigt?
Image1.Picture.Bitmap.Assign(FBitmap);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz