سؤال

باستخدام الكود أدناه الذي أرسم عليه 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top