Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Auf JPEG Bild zeichnen (https://www.delphipraxis.net/117767-auf-jpeg-bild-zeichnen.html)

TUX_der_Pinguin 24. Jul 2008 12:00


Auf JPEG Bild zeichnen
 
Hallo,

ich habe eine TImage Objekt, dort hinein lade ich ein JPEG mit Image.Picture.LoadFormFile('test.jpg'), anschließend würde ich gern einen Text auf das Bild schreiben und habe folgende
2 Möglichkeiten getestet.


Delphi-Quellcode:
With Image1.Canvas do begin
    Font.Name := 'Arial';
    Font.Size := 12;
    Font.Color := clRed;
    TextOut(10, 10, 'TEST - XXXXXXXXXX');
  end;
Diese Möglichkeit schlägt fehl da es sich nicht um ein "Bitmap" handelt.


Delphi-Quellcode:
With Image1.Picture.Bitmap.Canvas do begin
    Font.Name := 'Arial';
    Font.Size := 12;
    Font.Color := clRed;
    TextOut(10, 10, 'TEST - XXXXXXXXXX');
  end;
Bei dieser Möglichkeit kommt zwar keine Exception, sondern das Bild verschwindet man sieht
nur das leere Formular und der Text ist schonmal gar nicht zu sehen.

Ich bin etwas ratlos .. ich hoffe jemand hat einen Tipp oder eine Idee für mich.

mfg

TUX

DeddyH 24. Jul 2008 12:12

Re: Auf JPEG Bild zeichnen
 
Ich wüsste im Moment nur die Möglichkeit, die JPEG in TBitmap zu konvertieren, auf diese Bitmap zu zeichnen und ggf. wieder zurückzukonvertieren.

TUX_der_Pinguin 24. Jul 2008 12:23

Re: Auf JPEG Bild zeichnen
 
Zitat:

Zitat von DeddyH
Ich wüsste im Moment nur die Möglichkeit, die JPEG in TBitmap zu konvertieren, auf diese Bitmap zu zeichnen und ggf. wieder zurückzukonvertieren.

Hmm wie müßte ich das den machen? Zurückkonvertieren müßte ich nicht machen, ist ja nur eine
reine Anzeige die ich brauche.

DeddyH 24. Jul 2008 12:26

Re: Auf JPEG Bild zeichnen
 
Na, Bitmap erzeugen, mit Assign zuweisen und auf den Canvas zeichnen.

TUX_der_Pinguin 25. Jul 2008 09:26

Re: Auf JPEG Bild zeichnen
 
Ich habe das ganze jetzt mal folgender maßen gemacht und es scheint auch zu funktionieren.

Delphi-Quellcode:
procedure TfrmMain.Button4Click(Sender: TObject);
var
  Jpeg : TJPEGImage;

begin
  Jpeg := TJPEGImage.Create;
  try
    Jpeg.LoadFromFile('test.jpg');
    Image1.Picture.Bitmap.Assign(Jpeg);
  finally
    Jpeg.Free;
  end;

end;
Ich habe jetzt nur das Problem der Text den ich auf die Grafik zeichne wird mit Verzerrt,
d.h. das Bild ist eigentlich zu groß für die Auflösung des Monitors und wird mit der option
"Proportional" im richtigen Verhältnis verkleinert, jedoch wird auch der Text verkleinert.

Wie bekomme ich den Text in "originalgröße" auf das Bild?

DeddyH 25. Jul 2008 11:02

Re: Auf JPEG Bild zeichnen
 
Versuch mal so etwas:
Delphi-Quellcode:
procedure TFrmMain.ShowPictureWithText;
var img: TJPEGImage;
    bm: TBitmap;
    R: TRect;
begin
  img := TJPEGImage.Create;
  try
    img.LoadFromFile('C:\test.jpg');
    bm := TBitmap.Create;
    try
      bm.Assign(img);
      SetBkMode(bm.Canvas.Handle,TRANSPARENT);
      bm.Canvas.Font.Name := 'Arial';
      bm.Canvas.Font.Size := 16;
      bm.Canvas.Font.Color := clRed;
      bm.Canvas.Font.Style := [fsBold];
      R := Rect(0,0,bm.Width,bm.Height);
      DrawText(bm.Canvas.Handle,'Hallo',-1,R,
               DT_VCENTER or DT_CENTER or DT_SINGLELINE);
      Image1.Picture.Assign(bm);
    finally
      bm.Free;
    end;
  finally
    img.Free;
  end;
end;
[edit] Oh sorry, falsch verstanden. Dann nimm doch statt eines TImage eine TPaintbox, zeichne da die Grafik drauf und anschließend den Text darüber, das dürfte das Einfachste sein. [/edit]

TUX_der_Pinguin 25. Jul 2008 11:37

Re: Auf JPEG Bild zeichnen
 
Vielen dank für die Hilfe, ich habe meine Anwendung überarbeitet dahingehend das ich mit StretchBlt
selber das Bild verkleiner und somit auch nicht mehr das Problem habe das der Text verzerrt.

Diese lösung ist flexibler da ich mal das Bild in voller Größe darstellen will und dann wäre
der Text auf der Grafik im anderen fall ist das Bild kleiner und der Text wäre ausserhalb,
da ich aber den Text immer am oberen bzw. unteren Bildschirmrand haben möchte macht es daher
mehr sinn mit StretchBlt zu arbeiten.

Aber denoch vielen dank, und ein schönes Wochenende noch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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