2012-01-10 10 views
8

Ci sono circa quattro implementazioni che posso pensare che siano in grado di caricare la grafica SVG in un'applicazione Delphi.Quale strada prendere per caricare un'immagine SVG in un'app FireMonkey?

Uno di quelli, di Mattias Andersson, autore di FMX.Canvas.VPR , funziona con FireMonkey, ma non è ancora pronto a rilasciare il codice.

Un secondo, per Martin Walter, funziona con il VCL, ma lo sviluppatore ha lasciato Delphi e non ha intenzione di convertire in FireMonkey.

Un terzo, parte del framework AGGPAS, funziona con VCL, ma senza FireMonkey.

Una quarta è in sviluppo da Jason Southwell, ma nessuna data è stata ancora fissata.

Quindi la mia domanda: quale strada prendere se voglio un componente SVG oggi, senza provare a reinventare la ruota di un quinto (e probabilmente più) tempo?

+1

prega, fornire i collegamenti URL delle risorse che di riferimento. – menjaraz

+0

Fatto, ma qualcuno ha modificato la domanda in modo tale da indurre a credere che FMX.Canvas.VPR sia stata l'implementazione SVG, il che non è così. Corretto. – Domus

+0

Forse questo fornisce anche alcune informazioni utili: http://stackoverflow.com/questions/63607/rendering-svg-with-delphi –

risposta

3

Il componente SVG su cui sto lavorando è stato rilasciato come parte del nostro Apesuite per Firemonkey.

http://arcana.sivv.com/apesuite

+1

Comprato la beta e divertendoci! Bel pezzo di codice! – Domus

+0

Grazie. Mi sono divertito a costruirlo. –

+0

Il tuo sito dice che non è più disponibile per l'acquisto. Qualche piano per cambiarlo? –

1

Si potrebbe anche considerare l'utilizzo di Chromiumembedded. Basta caricare la svg nel browser incorporato. È quindi possibile combinare il codice Delphi con javascript, mixare in html e css, ecc.

In questo modo, è possibile lasciarlo a Chrome come disegnare velocemente (ad esempio se utilizzare accelerazione gpu o meno).

Avrai il supporto svg corretto, è facile da integrare nella tua applicazione, è flessibile, e c'è un sacco di documentazione e codice di esempio disponibile online.

+0

Grazie per la risposta. Avevo considerato Chromiumembedded come componente del visualizzatore HTML, ma pensavo che fosse piuttosto eccessivo caricare un semplice sprite SVG.La piccola grafica SVG dovrebbe essere rapidamente caricata e tradotta in oggetti FireMonkey, quindi sono liberi di essere manipolati, come trasparenza, rotazione, ridimensionamento, colore ecc. E questo per i loro singoli componenti. Non so se Chromiumembedded offre questo in modo elegante? – Domus

+0

Se si carica un file SVG, è possibile afferrarlo facilmente come bitmap; anche fuori dallo schermo. Ma sì, se hai solo un paio di sprite semplici, allora ChromiumEmbedded è probabilmente un modo eccessivo –

3

farsi coinvolgere con Mattias Andersson per lo sviluppo è l'opzione migliore:

  • FMX.Canvas.VPR da Mattias Andersson sembra essere molto promettente e VPR è dimostrato di essere un ottimo progetto di
  • No nutriti SVG FireMonkey componente di lavoro out- of-the-box è disponibile dal momento della pubblicazione (ampia ricerca sul web effettuata in generale).
+0

Concordo pienamente sull'eccellenza delle creazioni di Mattias Andersson. Il problema è che ho bisogno di un componente oggi. Forse dovrei chiedergli di entrare in una specie di beta. – Domus

+0

Ho anche cercato in alcuni forum delphi francese e tedesco ma sono stati invano. Sospettavo che la controparte cinese potesse aver cucinato qualcosa di interessante: sono molto prolifici e sembrano tenere il passo con la nuova Firemonkey. Forse potresti chiedere un aiuto speciale da un membro SO di lingua cinese. – menjaraz

+0

Sapevo che un giorno mi sarei pentito di non aver imparato il mandarino! – Domus

5

Sono Mattias Andersson - autore di FMX.Canvas.VPR; Posso dire che sto ancora lavorando attivamente alla soluzione SVG. Immagino che una volta aggiunto correttamente il supporto per le sfumature e il rendering del testo, potrò rilasciare una prima versione beta. Sto facendo affidamento su TXMLDocument e questo è un po 'restrittivo in ciò che ti è permesso di fare (IMO), quindi ho dovuto inventare alcune soluzioni alternative (forse un'opzione migliore sarebbe stata implementare la mia classe XML da zero). Inoltre, ho dovuto fare alcune patch runtime delle classi FireMonkey per far funzionare tutto correttamente. La parte buona è che in realtà sto implementando le cose in base alle specifiche dell'interfaccia SVG.

+0

Mille grazie per l'avviso, Mattias. La grafica SVG caricata sarà incorporata nei discendenti dell'oggetto FireMonkey in modo che ciascuno possa essere manipolato separatamente? – Domus

+1

Bene, esiste una classe TSVGImage che discende dalla classe FMX TControl. La classe TSVGImage ha una proprietà documento della classe TSVGDocument (un discendente di TXMLDocument). Ogni nodo nella classe TSVGDocument è un discendente TXMLNode che implementa le interfacce SVG appropriate per quel particolare tipo di nodo. Ad esempio, un nodo TSVGPathElement implementa ISVGAnimatedPathData, ISVGPathElement, ISVGLocatable, ISVGTests, ISVGExternalResourcesRequired, IEventTarget, ISVGLangSpace, ISVGStylable, ISVGElement (se il nodo rappresenta una primitiva visiva allora avrebbe anche un metodo Paint.) –

+1

Ovviamente un'opzione potrebbe essere quella di associare ciascun nodo a una classe TControl separata: presenta alcuni vantaggi: è possibile modificare facilmente le proprietà nell'ispettore dell'oggetto, ad esempio. Gli svantaggi sarebbero sovraccarichi di memoria aggiuntivi e sarebbero più strettamente legati a FMX (sto progettando di riutilizzare l'implementazione SVG per un mio progetto diverso che non dipende da FMX.) –