Entwickler-Ecke

Windows API - Wasserzeichen in bitmap einfügen


Alice - Mo 18.08.08 10:12
Titel: Wasserzeichen in bitmap einfügen
hi,

ich versuche eine art wasserzeichen in eine bitmap einzufügen, was auch ganz gut klappt.

bisher so (zentriert, outlined):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.AddWatermark(bitm:Tbitmap;inp:String);
begin
  with bitm.Canvas do begin
    Font.Name  := 'Arial';
    Font.Size  := 88;
    Font.Style := [fsbold];
    Brush.Style:= bsClear;
    Pen.Color  := clGray;
    Pen.Width  := 1;
    BeginPath(Handle);
    TextOut((bitm.width div 2)-(textwidth(inp) div 2),(bitm.height div 2)-(textheight(inp) div 2), inp);
    EndPath(Handle);
    StrokePath(Handle);
  end;
end;


was müsste ich noch hinzufügen, dass

a.
der text rotiert dargestellt wird (45grad, auch zentriert)

b.
das ganze transparent?, also das der Pen nicht die darunterliegenden farben verdeckt.

cu

alice


Bergmann89 - Mo 18.08.08 11:05

HI,

zu A: RotateBitmapA [http://www.delphi-forum.de/viewtopic.php?t=49684&highlight=rotatebitmapa]

zu B:
Das wird nich so einfach, weil Transparenz bei Delhpi bedeutet, das er die Farbe komplett ausblendet.
Entweder du zeichnest abwechselnd einen grauen und einen rosa Pixel und setzt rosa als transparente Farbe,
oder du kombinierst die Farbe deines Wasserzeichens mit der Farbe darunter:

Delphi-Quelltext
1:
2:
3:
Color := RGB((R1+R2)div 2,
             (G1+G2)div 2,
             (B1+B2)div 2,)

Das ist aber sehr rechenintensiv, muss es denn schnell gehen? oder hast du zum berechnen Zeit? Dann würd ich die 2. Methode nehmen!

MfG Bergmann.


Alice - Mo 18.08.08 15:41

user profile iconBergmann89 hat folgendes geschrieben:


zu A: RotateBitmapA [http://www.delphi-forum.de/viewtopic.php?t=49684&highlight=rotatebitmapa]



hi,

erstmal thx fürs antworten!

hier geht es um text auf einem bitmap.canvas, das bsp. zeigt, gedrehtes bitmap auf bitmap !?!

ich habe nun folg. lösung gefunden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.AddWatermark(bitm:Tbitmap;inp:String);
var
  lf  : TLogFont;
  tf  : TFont;
begin
  with bitm.Canvas do begin
    Font.Name  := 'Tahoma';
    Font.Size  := 77;
    Font.Style := [fsbold];
    Brush.Style:= bsClear;
    Pen.Color  := clGray;
    Pen.Width  := 1;
    tf         := TFont.Create;
    try
      tf.Assign(Font);
      GetObject(tf.Handle, sizeof(lf), @lf);
      lf.lfEscapement  := 330;
      lf.lfOrientation := 330;
      tf.Handle := CreateFontIndirect(lf);
      Font.Assign(tf);
      BeginPath(Handle);
      TextOut((bitm.width div 2)-(trunc(textwidth(inp) / 1.95)),(bitm.height div 2)+(trunc(textheight(inp) / 2.55)), inp);
      EndPath(Handle);
      StrokePath(Handle);
    finally
      tf.free;
    end;
  end;
end;


was dann so ...(anhang) aussieht.

cu

alice


Bergmann89 - Di 19.08.08 02:16

HI,

die Funktion die ich dir gezeigt hat geht doch trotzdem: Text auf Canvas zeichnen und dann einfach die Bitmap drehen, also dreht sich der Text auch mit...oder irre ich mich jetzt?

MfG Bergmann.


Alice - Di 19.08.08 04:39

user profile iconBergmann89 hat folgendes geschrieben:
HI,

die Funktion die ich dir gezeigt hat geht doch trotzdem: Text auf Canvas zeichnen und dann einfach die Bitmap drehen, also dreht sich der Text auch mit...oder irre ich mich jetzt?

MfG Bergmann.


hi,

ja! stimmt. :wink:

cu