none
Guardar Pantalla de InkCanvas RRS feed

  • Pregunta

  • Hola, Perdón una pregunta. Estoy aprendiendo a usar InkCanvas. Mi problema es que no sé cómo guardar la imagen inkCanvas en formato .jpg o .png. He seguido varios tutoriales y no consigo hacerlo.

    El código es este:

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="500" AllowsTransparency="True" WindowStyle="None" MouseLeftButtonDown="Window_MouseLeftButtonDown">
        <Grid Background="#FF510000">
            <InkCanvas x:Name="pad" Margin="10,10,10,64" Background="White"/>
            <Button x:Name="limpia" Content="Limpiar" HorizontalAlignment="Left" Height="30" Margin="10,0,0,20" VerticalAlignment="Bottom" Width="130" Click="limpia_Click"/>
            <Button x:Name="Guardar" Content="Guardar" Height="30" Margin="185,0,185,20" VerticalAlignment="Bottom" Click="limpia_Click"/>
            <Button x:Name="cerrar" Content="Cerrar" HorizontalAlignment="Right" Height="30" Margin="0,0,10,20" VerticalAlignment="Bottom" Width="130" Click="cerrar_Click"/>
    
        </Grid>
    </Window>
    
    
    
    
    
    
    
    
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.IO;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Lógica de interacción para MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void limpia_Click(object sender, RoutedEventArgs e)
            {
                this.pad.Strokes.Clear();
            }
    
            private void Guardar_Click(object sender, RoutedEventArgs e)
            {
                RenderTargetBitmap rtb = new RenderTargetBitmap((int)this.pad.ActualWidth, (int)this.pad.ActualHeight, 0, 0, PixelFormats.Pbgra32);
    
                rtb.Render(pad);
                JpegBitmapEncoder encoder = new JpegBitmapEncoder();
    
                encoder.Frames.Add(BitmapFrame.Create(rtb));
    
                FileStream file = new FileStream("savplayer.jpg", FileMode.Create);
    
                encoder.Save(file);
    
                //file.Close();
                //Form1 f1 = new Form1();
                //f1.ShowDialog();
            }
    
            private void cerrar_Click(object sender, RoutedEventArgs e)
            {
                this.Close();
            }
    
            private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                DragMove();
            }
        }
    }
    

    No me funciona la función de "Guardar". Ayuda por favor.

    Gracias.

    • Cambiado Joyce_AC miércoles, 28 de diciembre de 2016 18:35
    viernes, 2 de diciembre de 2016 11:32

Todas las respuestas

  • hola

    cual es problema que se genera? obtienes un mensaje de error o simplemente no genera la imagen

    podrias evaluar otras alternativas como ser

    Convert WPF InkCanvas to Bitmap

    en este caos genera un bitmap y devuelve el byte[] que luego puede grabar usando el File.WriteAllBytes()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Joyce_AC viernes, 2 de diciembre de 2016 15:57
    • Votado como útil Joyce_AC lunes, 5 de diciembre de 2016 19:30
    viernes, 2 de diciembre de 2016 15:14
  • hola

    cual es problema que se genera? obtienes un mensaje de error o simplemente no genera la imagen

    podrias evaluar otras alternativas como ser

    Convert WPF InkCanvas to Bitmap

    en este caos genera un bitmap y devuelve el byte[] que luego puede grabar usando el File.WriteAllBytes()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Hola, gracias por responder. No genera nada, ni mensajes de error, ni imágenes, ni nada.
    domingo, 4 de diciembre de 2016 12:35