AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Bild auf TImage mit SVG Grafiken zusammenführen (Skia)
Thema durchsuchen
Ansicht
Themen-Optionen

Bild auf TImage mit SVG Grafiken zusammenführen (Skia)

Ein Thema von fisipjm · begonnen am 25. Sep 2023 · letzter Beitrag vom 26. Sep 2023
Antwort Antwort
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#1

Bild auf TImage mit SVG Grafiken zusammenführen (Skia)

  Alt 25. Sep 2023, 15:58
Hi,

ich versuche mich jetzt schon eine ganze Zeit lang an folgendem Problem.
Ich bin dabei eine Komponente zu erstellen, auf der ich ein Bild "ändern" kann. Ändern in dem Sinne, dass ich Vektorgrafiken auf diesem Bild Platzieren kann und diese auch noch verschieben und die Größe ändern kann. Funktioniert auch ganz schön.

Ich hab eine TImageControl, da lade ich ein Image rein. Dann habe ich eine TObjectList<TSkSvg>. Dort werden die Vektorgrafiken gesammelt. Ich müsste aber eine Funktion bereitstellen, die diese beiden Ebenen zusammen bringt. Also mir alles zusammen in ein Bild zu packen und mir dieses zurück zu liefern.

TskSvg hat ein Canvas. Leider arbeitet FMX scheinbar nicht mehr so mit Canvas wie die VCL
Ist das wirklich so schwierig, oder stelle ich mich einfach nur super dumm dran?

Wäre um jeden Input dankbar.
vG
PJM
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#2

AW: Bild auf TImage mit SVG Grafiken zusammenführen (Skia)

  Alt 26. Sep 2023, 10:25
Okay, was ich bisher habe, stark vereinfachtes Beispiel, die Scales sind normal dynamisch und passen auch.

Delphi-Quellcode:
procedure MergeSVGAndImage;
var
  DestCanvas: TCanvas;
  PositionX: Single;
  PositionY: Single;
  SVGPoint: TSkSvg;
  Image1: TImage;
  lWidth: Single;
  lHeight: Single;
  lbitmap: TBitmap;
const
  cScreenScale = 1;
begin
  Image1 := TImage.Create(nil);
  try
    Image1.Bitmap.LoadFromFile('Some/Fancy/File.jpg');

    SVGPoint := TSkSvg.Create(nil);
    try
      SVGPoint.Parent := Image1;
      SVGPoint.Svg.Source := 'SVG FILE SOURCE';
      SVGPoint.Width := 42;
      SVGPoint.Height := 42;
      SVGPoint.Position.X := 42;
      SVGPoint.Position.Y := 42;

      DestCanvas := Image1.Bitmap.Canvas;
      DestCanvas.BeginScene;

      PositionX := SVGPoint.Position.X * cScreenScale;
      PositionY := SVGPoint.Position.Y * cScreenScale;
      lWidth := SVGPoint.Width * cScreenScale;
      lHeight := SVGPoint.Height * cScreenScale;
      SVGPoint.PaintTo(DestCanvas, RectF(PositionX, PositionY, lWidth, lHeight));

      DestCanvas.EndScene;

    finally
      SVGPoint.Free;
    end;

  finally
    Image1.Free;
  end;
end;
Wenn ich damit arbeite, bekomme ich meine SVG auf das Bild gezeichnet, aber nicht an die Stelle wo ich es gerne hätte. Hab die Befürchtung ich hab die Funktion von Canvas nicht wirklich verstanden

Grüße
PJM
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#3

AW: Bild auf TImage mit SVG Grafiken zusammenführen (Skia)

  Alt 26. Sep 2023, 10:40
Uff
Ich stand richtig auf dem Schlauch.

Wenn man im Canvas Right und Bottom auch noch richtig setzt funktioniert es auch. So gehts jetzt:

Delphi-Quellcode:
PositionX := Measurement.SVGPoint.Position.X;
    PositionY := Measurement.SVGPoint.Position.Y;
    lWidth := Measurement.SVGPoint.Width ;
    lHeight := Measurement.SVGPoint.Height ;

    SVGPoint.PaintTo(DestCanvas, RectF(PositionX, PositionY, lWidth + PositionX, lHeight + PositionY));
Manchmal kann man sich nur an den Kopf greifen und den Kaffee eine Sufe stärker drehen.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 16:30 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