vectorial - Crear un elemento WPF fuera de la pantalla y renderizar en mapa de bits
tipos de mapas de bits (1)
Porque los elementos no tienen un tamaño deseado hasta que los mides. Le estaba diciendo a la cuadrícula que se dimensione con un espacio disponible de 0x0. Cambie su código a:
grid.Measure(new Size(grid.Width, grid.Height));
grid.Arrange(new Rect(new Size(grid.Width, grid.Height)));
(La llamada a UpdateLayout es innecesaria).
No puedo entender por qué esto no funciona, o qué necesito para que funcione.
Para volver a crear, cree una aplicación WPF simple y reemplace el constructor de la ventana principal de este modo:
public MainWindow()
{
InitializeComponent();
// simple visual definition
var grid = new Grid { Width = 300, Height = 300 };
var text = new TextBlock
{
Text = "Y DON''T I WORK???",
FontSize = 100,
FontWeight =
FontWeights.Bold
};
grid.Children.Add(text);
// update the layout so everything is awesome cool
grid.Measure(grid.DesiredSize);
grid.Arrange(new Rect(grid.DesiredSize));
grid.UpdateLayout();
// create a BitmapSource from the visual
var rtb = new RenderTargetBitmap(
(int)grid.Width,
(int)grid.Height,
96,
96,
PixelFormats.Pbgra32);
rtb.Render(grid);
// Slap it in the window
this.Content = new Image { Source = rtb, Width = 300, Height = 300 };
}
Esto resulta en una imagen vacía. Si guardo el RTB en el disco como PNG es del tamaño correcto pero transparente.
Sin embargo, si hago esto con una imagen visual que se muestra en la pantalla, funciona bien.
¿Cómo puedo representar un visual que he construido fuera de pantalla en un mapa de bits?