![]() |
Re: halbtransparenten text auf TImage?
Zitat:
Ich will den Text selber Transparent haben...mehr nich *langsam verzweifelt* ;) Wenn ich den bereits transparenten Pixel mit dem Dest-Pixel "verrechne" kommt ja eine ungewollte Farbänderung zustande..oder? Um mein Vorhaben ganz kurz zu beschreiben: Eine Art Deckkraft-Funktion wie in Photoshop o.ä. Nur, dass man hier die Deckkraft nur 1x einstellen können muss und nicht dauernd ändern können muss /Edit: Könnte man nicht auch das Format der Bitmap temporär auf 32Bit stellen? /Edit2: Meintest du so?
Delphi-Quellcode:
rr := Trunc(((r/255)*opacity) + ((r2/255)*(255-opacity)));
gg := Trunc(((g/255)*opacity) + ((g2/255)*(255-opacity))); bb := Trunc(((b/255)*opacity) + ((b2/255)*(255-opacity))); |
Re: halbtransparenten text auf TImage?
Soll die Transparenz des TImage erhalten bleiben oder soll zwichen den Buchstaben die Transparenz (vollständige durchsichtigkeit) erhalten bleiben?
|
Re: halbtransparenten text auf TImage?
Ja, so meinte ich das. Ansonsten könnte Farbinformation verloregehen..
|
Re: halbtransparenten text auf TImage?
nochmal^^
ich will einfach nur einen text auf ein bild zeichnen. dieser text soll aber opacity haben, d.h. ich kann sagen, ob er nur zu 50% erscheinen soll...also halt halbtransparent. |
Re: halbtransparenten text auf TImage?
Geduld, Source ist fast fertig... (eigentlich total simpel)
|
Re: halbtransparenten text auf TImage?
Zitat:
Eig. wollt ichs selber machen...aber ich glaub, hier lern ich durch anschauen mehr :? |
Re: halbtransparenten text auf TImage?
Hier mein Meisterwerk, hoffe es ist einigermaßen verständlich.
Delphi-Quellcode:
Beispielaufruf (gibt 'Testtext' an Position X: 10 Y: 15 auf dem Bild aus)
function GetBlendColor(BaseColor: TColor; BlendColor: TColor; AlphaVal: Byte): TColor;
type TMyColor = record red: Byte; green: Byte; blue: Byte; end; var LF1, LF2: TMyColor; begin LF1.red := GetRValue(Basecolor); LF1.green := GetGValue(Basecolor); LF1.blue := GetBValue(Basecolor); LF2.red := (LF1.red * (255-AlphaVal) + GetRValue(Blendcolor) * AlphaVal) div 255; LF2.green := (LF1.green * (255-AlphaVal) + GetGValue(Blendcolor) * AlphaVal) div 255; LF2.blue := (LF1.blue * (255-AlphaVal) + GetBValue(Blendcolor) * AlphaVal) div 255; result := rgb(LF2.red, LF2.green, LF2.blue); end; procedure DrawTexttoBitmap1(ADest: TBitmap; AText: String; AFont: TFont; AlphaVal: Byte; APos: TPoint); var LBmp1: TBitmap; LBGColor, LColor1, LColor2: TColor; LWdhX, LWdhY: Integer; begin if AText <> '' then begin LBmp1 := TBitmap.Create; LBmp1.Canvas.Font.Assign(AFont); LBmp1.Width := LBmp1.Canvas.TextWidth(AText); LBmp1.Height := LBmp1.Canvas.TextHeight(AText); if AFont.Color = clWhite then LBGColor := clBlack else LBGColor := clWhite; LBmp1.Canvas.Brush.Color := LBGColor; LBmp1.Canvas.FillRect(Rect(0, 0, LBmp1.Width, LBmp1.Height)); LBmp1.Canvas.TextOut(0,0, AText); LWdhX := 0; while (LWdhX < ADest.Width - APos.X) and (LWdhX < LBmp1.Width) do begin LWdhY := 0; while (LWdhY < ADest.Height - APos.Y) and (LWdhY < LBmp1.Height) do begin LColor1 := LBmp1.Canvas.Pixels[LWdhX, LWdhY]; if LColor1 <> LBGColor then begin LColor2 := ADest.Canvas.Pixels[LWdhX + APos.X, LWdhY + APos.Y]; ADest.Canvas.Pixels[LWdhX + APos.X, LWdhY + APos.Y] := GetBlendColor(LColor2, LColor1, AlphaVal); end; inc(LWdhY); end; inc(LWdhX); end; LBmp1.Free; end; end;
Delphi-Quellcode:
Alphaval muss ein wert zwischen 0 (Text ist nicht sichtbar) und 255 (Text hat volle Deckkraft) sein
DrawTexttoBitmap1(Image1.Picture.Bitmap, 'Testtext', Font, 50, Point(10, 15));
|
Re: halbtransparenten text auf TImage?
Danke :-D
Bin die nächsten Minuten dann erstmal mit lesen und testen beschäftigt.. *fg* Edit: DANKÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ :mrgreen: Funktioniert einwandfrei! Genauso wie ichs wollte :) *auf Knie fall und anbet* So...nun muss ich mir den Code aber dringstens auch ansehen :) |
Re: halbtransparenten text auf TImage?
Falls den Quelltext jemand nicht versteht - fogendes wird gemacht.
Der Text wird auf ein Bitmap ausgegeben (LBmp1) dabei wird darauf geachtet das die Hintergrundfarbe ungleich der Textfarbe ist. Anschließend wird Pixel für Pixel des Bildes wo die schrift drauf ist (LBmp1) durchgegangen und wenn die Farbe des Pixels ungleich der Hintergrundfarbe ist (also Text an der Stelle ist), wird dieses Pixel mit der Farbe des Hintergrundbildes (ADest) gemicht und dann auf dem Hintergrund (ADest ) ausgegeben. |
Re: halbtransparenten text auf TImage?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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