AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi halbtransparenten text auf TImage?
Thema durchsuchen
Ansicht
Themen-Optionen

halbtransparenten text auf TImage?

Ein Thema von Airblader · begonnen am 29. Okt 2004 · letzter Beitrag vom 29. Okt 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#11

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 17:38
Zitat von Dax:
Dann nützt dir der Opacity-Wert aber nichts mehr - weil du ja einfach nur die src-Pixel oder die Dest-Pixel kopierst, ohne Alpha-Blend.
Wie meinen?
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)));
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 17:45
Soll die Transparenz des TImage erhalten bleiben oder soll zwichen den Buchstaben die Transparenz (vollständige durchsichtigkeit) erhalten bleiben?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#13

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 17:46
Ja, so meinte ich das. Ansonsten könnte Farbinformation verloregehen..
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#14

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 17:52
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.
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#15

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 17:57
Geduld, Source ist fast fertig... (eigentlich total simpel)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#16

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 18:00
Zitat von SirThornberry:
Geduld, Source ist fast fertig... (eigentlich total simpel)
Danke
Eig. wollt ichs selber machen...aber ich glaub, hier lern ich durch anschauen mehr
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#17

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 18:05
Hier mein Meisterwerk, hoffe es ist einigermaßen verständlich.
Delphi-Quellcode:
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;
Beispielaufruf (gibt 'Testtext' an Position X: 10 Y: 15 auf dem Bild aus)
  DrawTexttoBitmap1(Image1.Picture.Bitmap, 'Testtext', Font, 50, Point(10, 15)); Alphaval muss ein wert zwischen 0 (Text ist nicht sichtbar) und 255 (Text hat volle Deckkraft) sein
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#18

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 18:08
Danke

Bin die nächsten Minuten dann erstmal mit lesen und testen beschäftigt.. *fg*

Edit:

DANKÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Funktioniert einwandfrei! Genauso wie ichs wollte *auf Knie fall und anbet*

So...nun muss ich mir den Code aber dringstens auch ansehen
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#19

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 18:18
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#20

Re: halbtransparenten text auf TImage?

  Alt 29. Okt 2004, 18:23
Zitat von SirThornberry:
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.
Was genau das ist, was ich die ganze zeit zu erklären versuchte
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
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