Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Gelöst: Datum/Zeitestempel auf ein Image pinseln. (FMX) (https://www.delphipraxis.net/203640-geloest-datum-zeitestempel-auf-ein-image-pinseln-fmx.html)

TSHObject 7. Mär 2020 06:21


Gelöst: Datum/Zeitestempel auf ein Image pinseln. (FMX)
 
Hallo,

ich habe folgende Situation.
Auf meinem Form gibt es die Komponente Image1 vom Typ TImage (FMX) mit einem Bild von meiner Kamera.
Nun möchte ich auf das Bild drauf den Datum/Zeit-Stempel zeichnen und dann das Bild abspeichern.

Leider klappt das Zeichnen nicht. Weder das schwarze Rechteck noch irgend ein Text ist in dem gespeicherten Bild am Schluss sichtbar.

Delphi-Quellcode:
procedure TFrmMain.SavePicture(const _Path:string);
var
_BackgroundRect:TRectF;
_CapturedImage:TBitmap;
begin
   StopVideo;
  FPitcureDateTime:=now;
  _CapturedImage:=TBitmap.Create;          // temporäres Bitmap für das Zeichnen
  _CapturedImage.Assign(Image1.Bitmap);    // das Bild in das temporäre Bitmap kopieren.
  _BackgroundRect:=TRectF.Create(16,16,316,56);  // Rechteck für das Zeichnen des Datum/Zeitstempels erzeugen.
  _CapturedImage.Canvas.BeginScene;
  _CapturedImage.Canvas.Font.Size:=20;
  _CapturedImage.Canvas.Stroke.Kind:=TBrushKind.Solid;
  _CapturedImage.Canvas.Stroke.Thickness:=10;
  _CapturedImage.Canvas.Stroke.Color:=TColorRec.Lime;
  _CapturedImage.Canvas.Fill.Color := TColorRec.Black;
  _CapturedImage.Canvas.Fill.Kind:=TBrushKind.Solid;
  _CapturedImage.Canvas.DrawRect(_BackgroundRect,20,20,AllCorners,1.0);  // schwarzes Rechteck zeichnen.
  _CapturedImage.Canvas.FillText(_BackgroundRect,FormatDateTime('yyyyMMdd_hh.mm.ss', FPitcureDateTime), false, 1,[TFillTextFlag.RightToLeft], TTextAlign.Center, TTextAlign.Center);
  _CapturedImage.Canvas.EndScene;
  _CapturedImage.SaveToFile(_path+'saveimage.png');
end;
Hat jemand einen Tip?

Danke.

TSHObject 7. Mär 2020 14:26

AW: Gelöst: Datum/Zeitestempel auf ein Image pinseln. (FMX)
 
Hab's nun selber gefunden.

Anstatt "TColorRec.Lime" muss man "TAlphaColorRec.Lime" verwenden.

Also so:
_CapturedImage.Canvas.Stroke.Color:=TAlphaColorRec .Lime;
_CapturedImage.Canvas.Fill.Color := TAlphaColorRec.Black;

Harry Stahl 8. Mär 2020 11:13

AW: Gelöst: Datum/Zeitestempel auf ein Image pinseln. (FMX)
 
Du kannst Dir das Leben noch erleichtern, wenn Du die Unit "System.UIConsts" in Deine Units einbindest, wo Du Angaben zur Farbe machen mußt.

Dann kannst Du statt

"TAlphaColorRec.Lime;"

einfach schreiben

"claLime;"

Daneben stehen in dieser Unit noch einige interessante Color Funktionen zur Verfügung, z.B. wenn man mal AlphaColor zu TColor umrechnen muss oder einen RGB-Alphacolorwert zu BGR-Alphacolor umrechnen muss (z.B. auf dem MACOS sind Bitmaps als BGR-Colors konstruiert).

TSHObject 9. Mär 2020 20:45

AW: Gelöst: Datum/Zeitestempel auf ein Image pinseln. (FMX)
 
Übrigens,

falls jemand das Projekt ansehen will.
Es ist eine Überwachungskamera, welche Bilder in einen Ordner speichert sobald sich etwas bewegt.

Hier ist das ganze Projekt erhältlich. Es braucht keine zusätzlichen Komponenten und ist zur Zeit nur für Windows compilierbar.

https://sourceforge.net/p/surveillan...ode/HEAD/tree/

Ich möchte es noch um folgende Punkte erweitern.

A) Bilder können auch per E-Mail versendet werden.
B) die Einstellungen müssen noch in eine ini gespeichert und natürlich auch wieder geladen werden.


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