Я генерация JPG с визуальной помощью следующего кода (скажите мне ссылку, если вы знаете):Что такое VisualOffset?
var target = new RenderTargetBitmap((int)element.RenderSize.Width, (int)element.RenderSize.Height, 96, 96, PixelFormats.Pbgra32);
target.Render(element);
var jpg = new JpegBitmapEncoder() { QualityLevel = quality };
jpg.Frames.Add(BitmapFrame.Create(target));
Это прекрасно работает для одного визуальных, но и для другого вдруг выглядит сдвинуто с черным фоном. Вот эскиз (я не могу показать реальное изображение):
После установки точки останова на target.Render(element)
я случайно запятнать есть это свойство называется VisualOffset
:
Его значение является точным, как смещение визуального.
Что это? Как изменить его значение (это protected
)? Как я могу создать jpg из визуального без этой проблемы? Это может быть связано с анимациями или шаблонами данных?
Посмотрите [здесь] (https://blogs.msdn.microsoft.com/jaimer/2009/07/03/rendertargetbitmap-tips/). Здесь важны следующие разделы: Rect bounds = VisualTreeHelper.GetDescendantBounds (target); 'и' DrawingVisual dv = new DrawingVisual(); '. –
@ Nitro.de, это звучит как уродливое, но решение. Если вы опубликуете его в качестве ответа, я обещаю проголосовать за него. Не уверен в его принятии (отражение выглядит одинаково * плохим *, как создание другого визуального и рисования в нем с помощью VisualBrush). – Sinatr
Если вы посмотрите на [msdn] (https://msdn.microsoft.com/de-de/library/system.windows.media.imaging.rendertargetbitmap (v = vs.110) .aspx), они используют «DrawingVisual» тоже. –