عرض وارتفاع الصورة في RenderTargetBitmap في WPF
-
02-01-2020 - |
سؤال
باستخدام الكود أدناه الذي أرسم عليه 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;
}
}
المحلول
يمكنك الاستعلام عن DrawVisual ContentBounds
الملكية التي
يحصل على المربع المحيط بمحتويات ContainerVisual
أو ال DescendantBounds
الممتلكات التي
يحصل على اتحاد جميع الصناديق المحددة المحتوى لجميع أحفاد المحتوى ، ولكن ليس بما في ذلك محتويات الحذر.
شيء من هذا القبيل يجب أن تعمل:
var bounds = drawingVisual.DescendantBounds;
var bmp = new RenderTargetBitmap(
(int)Math.Ceiling(bounds.Width), (int)Math.Ceiling(bounds.Height),
96, 96, PixelFormats.Pbgra32);
لا تنتمي إلى StackOverflow