AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi XE8 Maps Marker Generieren

Ein Thema von hewy · begonnen am 18. Mai 2023 · letzter Beitrag vom 24. Mai 2023
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#11

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 15:35
Da stimmt auch irgendwie garnichts.

* TImage benutzt man ausschließlich zum Anzeigen (für eine "interne" Bildgenerierung ist es nutzlos übertrieben)
* TPicture kann man verwenden, um verschiedene Formate zu verwalten
* bzw. eine TGraphic-Variable als Vorfahre für diese ImageTypen (oder eben direkt TBitmap oder sonstwas)
* MarkerImage.Picture.Bitmap erzeugt beim Zugriff im TPicture.Graphic ein TBitmap, wobei alles Vorherige gelöscht wird, wenn es vorher kein TBitmap enthielt. (Entsprechend auch Graphic.Icon ein TIcon usw. ... es wurde kein .Draw vom alten zum neuen Bild eingebaut)


MarkerImage.Canvas
und MarkerImage.Picture.Graphic.Canvas bzw. MarkerImage.Picture.Bitmap.Canvas
sind was komplett unterschiedliches.

* auf MarkerImage.Canvas greift man niemals zu, denn das ist das Canvas der temporären sichtbaren Zeichenflächen (ähnlich einer TPaintBox)
* MarkerImage.Picture.***.Canvas ist das Canvas der permanenten internen Image- Grafik-Instanz
(beim OnChange im internen Bild gibt es ein Invalidate/Repaint auf dem Sichtbaren, was Jenes neu übermalt)

Und was macht GetBase64Image?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Mai 2023 um 12:56 Uhr)
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 16:27
So, hat ein wenig gedauert:

Delphi-Quellcode:
procedure TForm1.Make_MapPoint;
var
  origin, innerL, midL, midR, lft, tp, rgt, innerR : TPoint;
  radius, hgt : integer;

  BMP : TBitmap;
begin
  radius := 25;
  hgt := 90;
  origin.X := 27;
  origin.Y := 92;
  //control points
  innerL.X := origin.X;
  innerL.Y := origin.Y - (hgt - radius) div 3;
  midL.X := origin.X - radius;
  midL.Y := origin.Y - 2*((hgt - radius) div 3);
  //top circle
  lft.X := origin.X - radius;
  lft.Y := origin.Y - (hgt - radius);
  tp.X := origin.X;
  tp.Y := origin.Y - hgt;
  rgt.X := origin.X + radius;
  rgt.Y := lft.Y;
  //control points
  midR.X := origin.X + radius;
  midR.Y := midL.Y;
  innerR.X := origin.X;
  innerR.Y := innerL.Y;

  BMP := TBitmap.Create;

  with BMP do
  begin
    Width := 55;
    Height := 95;
    with Canvas do
    begin
      Brush.Color := clLime;
      Brush.Style := bsSolid;
      Pen.Color := clBlack;
      Pen.Width := 2;
      FillRect(Rect(0, 0, Width, Height));

      PolyBezier([origin, innerL, midL, lft]);
      Arc(lft.X, tp.Y, rgt.X, rgt.Y + radius, rgt.X, rgt.Y, lft.X, lft.Y);
      PolyBezier([rgt, midR, innerR, origin]);
      Brush.Color := clYellow;
      FloodFill(origin.X, origin.Y - radius, Canvas.Pen.Color, TFillStyle.fsBorder);
    end;
    Transparent:= true;
    TransparentColor := clWhite; // <<-Absichtlich andere Farbe als Brush.Color !!!
  end;

  PaintBox1.Canvas.Draw(2, 2, BMP);

  BMP.TransparentMode := tmAuto;

  PaintBox1.Canvas.Draw(100, 50, BMP);

  BMP.Free;

end;
Siehe auch das Beispiel zu Canvas.Draw.

[Edit]

Was sagt den TMS Maps wie Bilder/Images zugeliefert werden sollen?
Irgendwo muss doch stehen wie das mit dem Transparent gehandhabt wird.
[/Edit]
Miniaturansicht angehängter Grafiken
mp_test.jpg  

Geändert von Alter Mann (21. Mai 2023 um 16:50 Uhr)
  Mit Zitat antworten Zitat
hewy

Registriert seit: 2. Aug 2006
Ort: Arni (Region Zürich) Schweiz
81 Beiträge
 
Delphi XE5 Enterprise
 
#13

AW: Delphi XE8 Maps Marker Generieren

  Alt 22. Mai 2023, 10:57
Vielen Dank 'Alter Mann', Hast Dir einiges an Arbeit geleistet, Funktioniert soweit muss nun mit TMS prüfen was für deren Map Komponente geht.
Geben dann hier Bescheid wie ich es schlussendlich lösen konnte.
Heinrich Wyssen
  Mit Zitat antworten Zitat
hewy

Registriert seit: 2. Aug 2006
Ort: Arni (Region Zürich) Schweiz
81 Beiträge
 
Delphi XE5 Enterprise
 
#14

AW: Delphi XE8 Maps Marker Generieren

  Alt 23. Mai 2023, 17:50
Lösung gefunden, mit dem Code Beispiel von ‘Alter Mann’, das BitMap Resultat in ein png Format umwandeln und daraus ein Base64 String erstellen.
png := TPngImage.Create;
png.Assign( BMP );
Result := GetBase64Image(png);
Das wird von TMS FNC PAPS so korrekt mit den gewünschten transparenten Flächen angezeigt
Danke nochmals
Heinrich Wyssen
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Delphi XE8 Maps Marker Generieren

  Alt 24. Mai 2023, 08:32
Ich raff das mit dem Base64-String nicht.
Warum solltest du diesen Umweg gehen? Schickst du das per Netzwerk irgendwo hin?
In der groben Übersichtsdoku steht nichts von Base64?
https://download.tmssoftware.com/doc...cmaps/#markers
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#16

AW: Delphi XE8 Maps Marker Generieren

  Alt 24. Mai 2023, 16:34
Ich raff das mit dem Base64-String nicht.
Vorweg, ich kenne die Komponente nicht. In der Beschreibung steht als Voraussetzung TTMSFNCWebBrowser. Vermutlich steuert die Komponente Services, wie z.B. Google Maps, die in einem Browser-Fenster laufen. Ein Image in HTML lässt sich mit folgenden Schema füllen:
Code:
Image.URL := 'data:image/'+ MimeType +';base64,' + BinStream.Base64;
Bis bald...
Thomas
  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 21:18 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