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
Benutzerbild von himitsu
himitsu

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 20. Mai 2023, 13:01
Nja, irgendwas muß dabei als "transparent" erkannt werden.
* das könnte eine bestimmte Farbe sein,
* aber auch die Farbe eines bestimmten Pixels (die erste Ecke)
* oder z.B. ein AlphaKanals in der Farbe (32 Bit-Farbe)

Was nun aber für dieses Overlay verwendet wird, das sollte doch bestimmt in der Doku stehen?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hewy

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 12:13
Danke für deinen Hint Himitsu,
ich übergebe einen Base64 String was auch einwandfrei funktioniert. TMS Maps Zeichnet einfach das was übergeben wird.
Übergebe ich base64 Strings, die ich mit einem separaten Graphik Programm erstellte und darin den gewünschten Bereich Transparent mache dann ist die Darstellung so wie gewünscht.
Generiere ich die Marker mit der beigefügten Funktion (Siehe Anlage) fehlt der Transparente Teil und dieser wird dann leider weiss oder was auch immer ich definiere dargestellt.
Also meine Frage wie bekomme ich meine Funktion ‘GenerateMarker’ Marker so hin dass die Blauen Marker den Weissen Bereich transparent macht?
Siehe Anhang: Blaue Ist Gelbe Soll
Angehängte Grafiken
Dateityp: jpg Soll_Ist.jpg (50,4 KB, 23x aufgerufen)
Heinrich Wyssen

Geändert von hewy (21. Mai 2023 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 13:16
Das Bast64 ist vollkommen irrelevant, gegenüber einer binären Übergabe.
Die Übergabe per se funktioniert ja schließlich.

Es kommt also auf das drauf an, was als Daten übergeben wird.
ImageTyp und das Format.


Du wirst ja wohl nicht auf eine PaintBox malen.

Was für ein Typ hat das Bild und in welchem Format wird das Bild gespeichert.
TPngImage, TBitmap, TJPEGImage, ...
und beim Bitmap z.B. die Farbtiefe/Bits (16, 24, 32 und wie sie interpretiert werden, ala AlphaKanal) oder ob es zusätzlich eine BitMaks gibt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Alter Mann

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 13:51
Brush.Style := bsClear;
  Mit Zitat antworten Zitat
hewy

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 14:13
Ok habe das Ganze meiner Meinung nach auf das notwendige Minimum reduziert.
Bekomme aber immer noch die vollen Hintergrund Flächen möchte alles was clFuchsia ist transparent haben.

Delphi-Quellcode:
    Function tMarkerUtils.GenerateTriMarker(aColor: tColor): string;

    var MarkerImage: TImage;
        TransparentColor: TColor;
        Points: array of TPoint;

    begin
      MarkerImage:= TImage.Create(nil);
      try
        MarkerImage.Width:= 55;
        MarkerImage.Height:= 30;
        MarkerImage.Picture:=nil;

        TransparentColor := clFuchsia; // Background color

        MarkerImage.Canvas.Brush.Style := bsClear;
        MarkerImage.Canvas.Brush.Color:= TransparentColor;
        MarkerImage.Picture.Bitmap.TransparentColor := TransparentColor;
        MarkerImage.Picture.Bitmap.Transparent:= true;
        MarkerImage.Canvas.FillRect(Rect(0, 0, MarkerImage.Width, MarkerImage.Height));

        SetLength(Points, 3);
        Points[0] := Point(5, 5);
        Points[1] := Point(35, 5);
        Points[2] := Point(20, 20);
        MarkerImage.Canvas.Pen.Width := 2;
        MarkerImage.Canvas.Pen.Color := clBlack;
        MarkerImage.Canvas.Brush.Color := aColor;
        MarkerImage.Canvas.Polygon(Points);

        Result:= GetBase64Image(MarkerImage);
      finally
        MarkerImage.Free;
      end;
    end;
Angehängte Grafiken
Dateityp: png Triangles.PNG (314,0 KB, 16x aufgerufen)
Heinrich Wyssen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 14: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?
Ein Therapeut entspricht 1024 Gigapeut.

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

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 21. Mai 2023, 15: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]
Angehängte Grafiken
Dateityp: jpg MP_Test.jpg (20,6 KB, 19x aufgerufen)

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

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

AW: Delphi XE8 Maps Marker Generieren

  Alt 22. Mai 2023, 09: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
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 21:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz