Nein.
Ich will ja einen schlichten Text auf ein Bild malen.
Da ich im 24er Bitmap die Transparenz aber nicht abfragen kann,
könnte ich doch in dem src-Bitmap als Hintergrundfarbe eine Farbe setzen, die ich beim Funktionsaufruf angebe.
So kann ich anstatt die Transparenz abzufragen, die gegebene Farbe abfragen.
Wenn der akt. Pixel dieser Farbe entspricht, bekommt der Pixel den Farbwert der Dest-Bitmap die diesem Pixel entspricht.
Hoffe nun geklärt zu haben
/edit:
mit Trunc:
Delphi-Quellcode:
function TForm1.text_opacity(
const src,dest: TBitmap; opacity: byte): Boolean;
var
w,h: integer;
col, col2: Longint;
r1, g1, b1: byte;
r2, g2, b2: byte;
rr, gg, bb: byte;
begin
for h:=0
to src.Height
do
begin
for w:=0
to src.Width
do
begin
// Src:
col := ColorToRGB(src.Canvas.Pixels[w,h]);
// Pixelfarbe
// Nun R G und B Wert holen:
r1 := GetRValue(col);
g1 := GetGValue(col);
b1 := GetBValue(col);
// Dest:
col2 := ColorToRGB(dest.Canvas.Pixels[w,h]);
// Pixelfarbe
// Nun R G und B Wert holen:
r2 := GetRValue(col2);
g2 := GetGValue(col2);
b2 := GetBValue(col2);
// Neue RGB Werte errechnen
rr := (Trunc(r/255)*opacity) + (Trunc(r2/255)*(255-opacity));
gg := (Trunc(g/255)*opacity) + (Trunc(g2/255)*(255-opacity));
bb := (Trunc(b/255)*opacity) + (Trunc(b2/255)*(255-opacity));
// Pixel neu zeichnen
dest.Canvas.Pixels[w,h] :=
RGB(rr,gg,bb);
end;
end;
end;