次のコードを使用して、DrawingVisual にテキストを描画しています。RenderTargetBitmap
これを使用してビットマップに変換すると、パフォーマンスが向上すると聞きました。
public class ModelBeamSectionNamesInPlan : UIElement
{
private readonly VisualCollection _visuals;
public ModelBeamSectionNamesInPlan(BaseWorkspace space)
{
var typeface = Settings.BeamTextTypeface;
var cultureinfo = Settings.CultureInfo;
var flowdirection = Settings.FlowDirection;
var beamtextsize = Settings.BeamTextSize;
var beamtextcolor = Settings.InPlanBeamTextColor;
const double scale = 0.5;
_visuals = new VisualCollection(this);
foreach (var beam in Building.ModelBeamsInTheElevation)
{
var drawingVisual = new DrawingVisual();
using (var dc = drawingVisual.RenderOpen())
{
var text = beam.Section.Id;
var ft = new FormattedText(text, cultureinfo, flowdirection,
typeface, beamtextsize, beamtextcolor,
null, TextFormattingMode.Display)
{
TextAlignment = TextAlignment.Center
};
// Draw Text
dc.DrawText(ft, space.FlipYAxis(x, y));
}
_visuals.Add(drawingVisual);
}
}
protected override Visual GetVisualChild(int index)
{
return _visuals[index];
}
protected override int VisualChildrenCount
{
get
{
return _visuals.Count;
}
}
}
そして最後に、以下のコードを使用してテキストを追加していますCanvas
:
var beamtexts = new ModelBeamSectionNamesInPlan(this);
MyCanvas.Children.Add(beamtexts);
RenderTargetBitmap
を使用して BMP に変換する場所と、それを MyCanvas に追加する方法がまったくわかりません。
RenderTargetBitmap
ドキュメントの例では、これを見つけました:
RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32);
bmp.Render(drawingVisual);
myImage.Source = bmp;
しかし、これをコードに実装する方法がわかりません。