Tôi đã tìm thấy một bước ngoặt mới về câu hỏi "Visual to RenderTargetBitmap"!RenderTargetBitmap + Resource'd VisualBrush = hình ảnh không đầy đủ
Tôi đang hiển thị xem trước nội dung WPF cho một nhà thiết kế. Điều đó có nghĩa là tôi cần phải có một hình ảnh WPF và đưa nó vào một bitmap mà không có hình ảnh đó từng được hiển thị. Có một phương pháp ít tốt đẹp để làm điều đó muốn nhìn thấy nó ở đây nó đi
private static BitmapSource CreateBitmapSource(FrameworkElement visual)
{
Border b = new Border { Width = visual.Width, Height = visual.Height };
b.BorderBrush = Brushes.Black;
b.BorderThickness = new Thickness(1);
b.Background = Brushes.White;
b.Child = visual;
b.Measure(new Size(b.Width, b.Height));
b.Arrange(new Rect(b.DesiredSize));
RenderTargetBitmap rtb = new RenderTargetBitmap(
(int)b.ActualWidth,
(int)b.ActualHeight,
96,
96,
PixelFormats.Pbgra32);
// intermediate step here to ensure any VisualBrushes are rendered properly
DrawingVisual dv = new DrawingVisual();
using (var dc = dv.RenderOpen())
{
var vb = new VisualBrush(b);
dc.DrawRectangle(vb, null, new Rect(new Point(), b.DesiredSize));
}
rtb.Render(dv);
return rtb;
}
Hoạt động tốt, ngoại trừ một điều leeetle ... nếu FrameworkElement tôi có một VisualBrush, bàn chải mà không kết thúc trong trận chung kết bitmap được hiển thị. Một cái gì đó như thế này:
<UserControl.Resources>
<VisualBrush
x:Key="LOLgo">
<VisualBrush.Visual>
<!-- blah blah -->
<Grid
Background="{StaticResource LOLgo}">
<!-- yadda yadda -->
Mọi thứ khác hiển thị với bitmap, nhưng VisualBrush đó sẽ không hiển thị. Các giải pháp google rõ ràng đã được thử và đã thất bại. Ngay cả những cái mà đề cập cụ thể VisualBrushes thiếu từ bitmap RTB'd.
Tôi có một sự nghi ngờ lén lút điều này có thể là do thực tế là Tài nguyên của nó và tài nguyên lười biếng đó không được gạch chân. Vì vậy, một sửa chữa có thể sẽ được, bằng cách nào đó (???), lực lượng giải quyết tất cả các tài liệu tham khảo tài nguyên tĩnh trước khi dựng hình. Nhưng tôi hoàn toàn không có ý tưởng làm thế nào để làm điều đó.
Mọi người có khắc phục sự cố này không?
Vâng, tôi đã đọc và thử xả bộ điều phối, nhưng điều đó không giúp ích gì cho chính nó. Tôi sẽ thử thêm nguồn trình bày mà tôi không làm. Cảm ơn. – Will
Hãy chắc chắn rằng bạn xả điều phối cuối cùng, sau khi tất cả các bước khác được thực hiện.Ngoài ra tôi nhận thấy bạn thiết lập chiều cao và với biên giới của bạn một cách rõ ràng, trong khi tôi đo bằng PositiveInfinity. –
@ray vâng, tôi đã làm điều đó một lúc rồi nhận ra rằng biện pháp chỉ cần biết tối đa, chứ không phải là thực tế. Tôi đã làm nó với + inf kể từ khi tôi học được điều đó. Sẽ sớm cố gắng này. – Will