Je tente de créer des images de graphique sans jamais afficher ces graphiques à l'écran. Cela fait longtemps que je suis là et j'ai essayé beaucoup de choses différentes mais rien ne semble fonctionner. Le code fonctionne parfaitement si j'affiche d'abord le graphique dans une fenêtre, mais si je ne l'affiche pas dans une fenêtre, le bitmap est juste blanc avec une bordure noire (aucune idée pourquoi).ContentControl + RenderTargetBitmap + image vide
J'ai essayé d'ajouter le graphique à une bordure avant de le rendre et de donner à la bordure une bordure verte. Dans le bitmap, je vois la bordure verte puis la bordure noire et le fond blanc mais pas de graphique. Le tableau n'est pas contenu dans un tableau noir, donc je ne sais pas d'où ça vient.
J'ai essayé d'ajouter le graphique à une fenêtre sans appeler window.Show() et encore je viens d'obtenir le fond noir et blanc. Cependant si j'appelle window.Show() le bitmap contient le diagramme.
J'ai essayé d'utiliser un dessinVisuel comme expliqué here, même résultat.
Voici le code (non compris l'ajout de l'élément à une bordure ou d'une fenêtre):
private static BitmapSource CreateElementScreenshot(FrameworkElement element, int dpi)
{
if (!element.IsMeasureValid)
{
Size size = new Size(element.Width, element.Height);
element.Measure(size);
element.Arrange(new Rect(size));
}
element.UpdateLayout();
var scale = dpi/96.0;
var renderTargetBitmap = new RenderTargetBitmap
(
(int)(scale * element.RenderSize.Width),(int)(scale * element.RenderSize.Height),dpi,dpi,PixelFormats.Default
);
// this is waiting for dispatcher to perform measure, arrange and render passes
element.Dispatcher.Invoke(((Action)(() => renderTargetBitmap.Render(element))), DispatcherPriority.Render);
return renderTargetBitmap;
}
Note: Le tableau est un ContentControl.
Y at-il de toute façon que je puisse obtenir le rendu du graphique sans l'afficher d'abord dans une fenêtre?
Ça ne marche pas pour moi. Où avez-vous inséré dans votre code le ApplyTemplate? –
Désolé, cela fait deux ans que j'ai répondu à cette question et que je n'ai plus accès à ce code. Essayez de l'ajouter avant le UpdateLayout – Kelly
Merci d'avoir posté la réponse. Tu m'as sauvé beaucoup d'ennuis! :) – ihake