Ширина и высота изображения в RenderTargetBitmap в WPF
Используя приведенный ниже код, я рисую DrawingVisual
затем рендеринг Image
с помощью RenderTargetBitmap
, Финал Image
позже добавляется в Canvas
и отображается на экране.
Моя проблема с pixelWidth
а также pixelHeight
аргументы RenderTargetBitmap
метод хочет. Какую ценность я должен дать ему? Я заметил, что, если я даю ему меньшие числа, части изображения не отображаются. На каком основании я должен выбрать эти? Я дал ему 1000 в коде ниже.
public class ModelBeamSectionNamesInPlan : Image
{
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;
beamtextcolor.Freeze();
const double scale = 0.6;
var drawingVisual = new DrawingVisual();
using (var dc = drawingVisual.RenderOpen())
{
foreach (var beam in Building.ModelBeamsInTheElevation)
{
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));
}
}
var bmp = new RenderTargetBitmap(1000, 1000, 120, 96, PixelFormats.Pbgra32);
bmp.Render(drawingVisual);
Source = bmp;
}
}
1 ответ
Вы можете запросить DrawingVisual's ContentBounds
свойство, которое
получает ограничивающий прямоугольник для содержимого ContainerVisual
или DescendantBounds
свойство, которое
получает объединение всех ограничивающих прямоугольников содержимого для всех потомков ContainerVisual, но не включая содержимое ContainerVisual.
Примерно так должно работать:
var bounds = drawingVisual.DescendantBounds;
var bmp = new RenderTargetBitmap(
(int)Math.Ceiling(bounds.Width), (int)Math.Ceiling(bounds.Height),
96, 96, PixelFormats.Pbgra32);