Comment rendre bitmap en toile en WPF?
-
24-09-2019 - |
Question
Je l'ai sous-classé Canvas
pour que je puisse passer outre sa fonction de Render
. Je dois savoir comment je peux charger une image bitmap dans WPF et que rendre sur la toile. Je suis tout à fait nouveau pour WPF et je ne l'ai pas trouvé de tutoriels que vous montrer comment faire quelque chose de si apparemment trivial. Étape par étape les instructions avec des exemples seraient grands.
La solution
Cela devrait vous aider à démarrer:
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));
}
}
Autres conseils
Dans WPF, il est un cas rare que vous devez remplacer OnRender
surtout si tout ce que vous vouliez faire était de dessiner un BMP à un arrière-plan:
<Canvas>
<Canvas.Background>
<ImageBrush ImageSource="Resources\background.bmp" />
</Canvas.Background>
<!-- ... -->
</Canvas>
Si vous voulez peindre fond de toile, je vous conseille d'utiliser ImageBrush
comme Background
, « coz c'est simple que vous ne avez pas besoin de sous-classe Canvas
pour remplacer Onender
.
Mais je vais vous donner un code source de démonstration pour ce que vous avez demandé:
Créer une classe (je l'ai appelé 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);
}
}
}
Maintenant, vous pouvez l'utiliser comme ceci:
<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>