Je dessine l'image vectorielle du fichier SVG à TImage. Je veux changer la couleur de tous les chemins en une seule couleur à l'exécution, mais le code suivant change de couleur pour le premier chemin de SVG. Tous les chemins en SVG ont la même couleur (noir - # 000000). Quelqu'un sait, comment changer la couleur de tous les chemins?Dessiner SVG avec cairo, librsvg et delphi, changer les couleurs de tous les chemins
...
img1: TImage; // TImage placed on the TForm1
...
procedure TForm1.DrawSVG(const aFileName: TFileName);
var
wSVGObject: IRSVGObject;
wSurface: IWin32Surface;
wContext: ICairoContext;
wRect: TRect;
begin
wSVGObject := TRSVGObject.Create(aFileName);
// img1 initialization
wRect.Left := 0;
wRect.Top := 0;
wRect.width := img1.width;
wRect.height := img1.height;
img1.Canvas.Brush.Color := clWhite;
img1.Canvas.FillRect(wRect);
wSurface := TWin32Surface.CreateHDC(img1.Canvas.Handle);
wContext := TCairoContext.Create(wSurface);
wContext.Antialias := CAIRO_ANTIALIAS_DEFAULT;
// try to change color of vector image, but only first path changes color
wContext.SetSourceRGB(0.5, 0.5, 0.5);
wContext.Rectangle(wRect.Left, wRect.Top, wRect.width, wRect.height);
wSurface.Flush;
wContext.FillPreserve;
wContext.RenderSVG(wSVGObject);
end;
Ma solution a ajouté 18,8. – vnc
Pouvez-vous s'il vous plaît partager où télécharger les dernières versions de cairo + librsvg afin que nous puissions également tester ce code? – zig
le lien est ici: https://code.google.com/p/delphignomevectorgraphic/source/browse/trunk/?r=4, il y a des binaires et des unités delphi. Si vous voulez utiliser du code, vous devez définir ces deux directives: {$ Define CAIRO_HAS_RSVG_FUNCTIONS} {$ Define CAIRO_HAS_WIN32_SURFACE} – vnc