He subclasificado Canvas
para poder anular su función Render
. Necesito saber cómo puedo cargar un mapa de bits en WPF y renderizarlo en el lienzo. Soy completamente nuevo en WPF y no he encontrado ningún tutorial que te muestre cómo hacer algo tan aparentemente trivial. Las instrucciones paso a paso con ejemplos serían geniales.¿Cómo renderizar bitmap en canvas en WPF?
9
A
Respuesta
11
Esto debería empezar:
class MyCanvas : Canvas {
protected override void OnRender (DrawingContext dc) {
BitmapImage img = new BitmapImage (new Uri ("c:\\demo.jpg"));
dc.DrawImage (img, new Rect (0, 0, img.PixelWidth, img.PixelHeight));
}
}
3
Si desea pintar el fondo del lienzo, yo recomendaría usar ImageBrush
como Background
, 'coz que es sencillo ya que no necesita subclase Canvas
para anular Onender
.
Pero te voy a dar una fuente de código de demostración de lo que has pedido:
crear una clase (la he llamado ImageCanvas
)
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace WpfApplication1
{
public class ImageCanvas : Canvas
{
public ImageSource CanvasImageSource
{
get { return (ImageSource)GetValue(CanvasImageSourceProperty); }
set { SetValue(CanvasImageSourceProperty, value); }
}
public static readonly DependencyProperty CanvasImageSourceProperty =
DependencyProperty.Register("CanvasImageSource", typeof(ImageSource),
typeof(ImageCanvas), new FrameworkPropertyMetadata(default(ImageSource)));
protected override void OnRender(System.Windows.Media.DrawingContext dc)
{
dc.DrawImage(CanvasImageSource, new Rect(this.RenderSize));
base.OnRender(dc);
}
}
}
Ahora se puede utilizar de esta manera :
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1" Title="Window1" Height="300" Width="300">
<Grid>
<local:ImageCanvas CanvasImageSource="/Splash.png">
<TextBlock Text="Hello From Mihir!" />
</local:ImageCanvas>
</Grid>
</Window>
11
En WPF es un caso raro de que se necesitaría para anular OnRender
especialmente si todo lo que quería hacer era dibujar un BMP a un fondo:
<Canvas>
<Canvas.Background>
<ImageBrush ImageSource="Resources\background.bmp" />
</Canvas.Background>
<!-- ... -->
</Canvas>
Cuestiones relacionadas
- 1. Cómo dibujar la cuadrícula en WPF Canvas?
- 2. WPF canvas Evento VisibilityChanged
- 3. wpf canvas background image dinámicamente
- 4. ¿Cómo rotar Bitmap sin crear uno nuevo?
- 5. Lienzo de escala en Android Bitmap
- 6. ¿Cómo dibujar en Bitmap en Android?
- 7. Encuadernación a X Y coordenadas del elemento en WPF Canvas
- 8. Encuadernación WPF Canvas Children a una ObservableCollection
- 9. Cómo rotar Bitmap en Windows GDI?
- 10. ¿Por qué no baja WPF Canvas ahora?
- 11. ¿Cómo usar Canvas para fusionar dos imágenes en Android?
- 12. Renderizar control WPF encima de WindowsFormsHost
- 13. Implementar una operación más rápida de gráficos en WPF Canvas
- 14. WPF Canvas - Cuadrícula de un solo píxel
- 15. Bitmap recycle() en java Android
- 16. ¿Cómo renderizar doT.js en plantillas en nodejs?
- 17. Al usar ItemsControl ItemsControl.ItemsPanel se establece en Canvas, ContenPresenter entra y rompe mis propiedades Canvas en los elementos secundarios [WPF]
- 18. Escalando el contenido de WPF antes de renderizar en mapa de bits
- 19. Cómo dibujar TextView en Canvas en android ..?
- 20. Cómo renderizar un cursor transparente al mapa de bits preservando el canal alfa?
- 21. Android: ¿Cómo resolver Bitmap java.lang.OutOfMemoryError?
- 22. JPopupMenu pantalla en Canvas
- 23. Reducción del tamaño de bitmap en C#
- 24. Cómo renderizar partial.js en rieles 3
- 25. Cómo renderizar Vista parcial en MVC3
- 26. Cómo renderizar un cubo 3d en LWJGL?
- 27. ¿Cómo renderizar etiquetas en Flask/GAE?
- 28. Cómo renderizar un UserControl de WPF en un mapa de bits sin crear una ventana
- 29. Renderizar archivo ejs en node.js
- 30. Renderizar un byte [] como mapa de bits en Android