これらのチャートを画面に表示することなく、いくつかのチャート画像を作成しようとしています。私はかなり長い間これに携わっていて、さまざまなことを試しましたが、何もうまくいかないようです。最初にチャートをウィンドウに表示すると、コードは完全に機能しますが、ウィンドウに表示しないと、ビットマップは白と黒の境界線だけになります (理由はわかりません)。
レンダリングする前に境界線にグラフを追加して、境界線に緑色のborderBrushを追加しようとしました。ビットマップでは、緑の borderBrush が表示され、次に黒の境界線と白の背景が表示されますが、グラフは表示されません。チャートは黒いボーダーに含まれていないので、それがどこから来ているのかわかりません。
window.Show() を呼び出さずにチャートをウィンドウに追加しようとしましたが、再び黒いボーダーと白い背景が表示されます。ただし、window.Show() を呼び出すと、ビットマップにチャートが含まれます。
hereで説明されているように、drawingVisual を使用してみましたが、同じ結果です。
コードは次のとおりです (境界線またはウィンドウへの要素の追加は含まれません)。
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;
}
注: グラフは ContentControl です。
最初にウィンドウに表示せずにチャートをレンダリングする方法はありますか?