首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在wpf中使用savefiledialog保存画布

如何在wpf中使用savefiledialog保存画布
EN

Stack Overflow用户
提问于 2013-11-21 15:04:02
回答 1查看 2.4K关注 0票数 1

这里我有XAML的代码,我想要保存为图像使用windows窗体保存文件dailog和上传图像到墨水画布。

代码语言:javascript
复制
        <StackPanel Margin="0,4,45,0" DockPanel.Dock="Right" Width="580">
        <Border BorderBrush="Red" BorderThickness="5">
            <InkCanvas Name="InkCanvas1" Height="200">
                <InkCanvas.DefaultDrawingAttributes>
                    <DrawingAttributes Width="20" Height="20" Color="Red" ></DrawingAttributes>
                </InkCanvas.DefaultDrawingAttributes>
            </InkCanvas>
        </Border>
    </StackPanel>

如何保存特定区域的画布,并上传图像到油墨画布。请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2013-11-21 15:25:02

您必须将您的InkCanvas转换为位图。下面的代码是快速n脏的。

代码语言:javascript
复制
<Window x:Class="InkCanvas.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <InkCanvas Name="yourinkcanvas">
        <Image Source="http://blogs.msdn.com/blogfiles/expression/WindowsLiveWriter/ASmallInkCanvasSample_10388/inkcanvasExample_a6d9403d-4bca-40bb-93ad-6364d537f2c6.png"/>
    </InkCanvas>
    <Button Content="SAVE" Height="20" VerticalAlignment="Bottom" Click="Button_Click"/>
</Grid>

代码语言:javascript
复制
private void Button_Click(object sender, RoutedEventArgs e)
    {
        Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
        dlg.FileName = "savedimage"; // Default file name
        dlg.DefaultExt = ".jpg"; // Default file extension
        dlg.Filter = "Image (.jpg)|*.jpg"; // Filter files by extension

        // Show save file dialog box
        Nullable<bool> result = dlg.ShowDialog();

        // Process save file dialog box results
        if (result == true)
        {
            // Save document
            string filename = dlg.FileName;
            //get the dimensions of the ink control
            int margin = (int)this.yourinkcanvas.Margin.Left;
            int width = (int)this.yourinkcanvas.ActualWidth - margin;
            int height = (int)this.yourinkcanvas.ActualHeight - margin;
            //render ink to bitmap
            RenderTargetBitmap rtb =
            new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Default);
            rtb.Render(yourinkcanvas);

            using (FileStream fs = new FileStream(filename, FileMode.Create))
            {
                BmpBitmapEncoder encoder = new BmpBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(rtb));
                encoder.Save(fs);    
            }
        }
    }

要保存特定区域,请使用“边距”、“宽度”和“高度”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20124448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档