是否可以将 InkCanvas 笔触集合保存到 svg 图像?我唯一能找到的是,我可以将笔画保存为带有嵌入式 ISF(墨水序列化格式)的 GIF,或者将它们呈现为位图。我想以可以与其他平台(如 Web)互操作的矢量格式保存笔画。
我需要在WPF应用程序中使用InkCanvas(它是UWP Windows.UI.Xaml.Controls的一部分).我知道WPF也有InkCanvas,但它们完全不同.UWP InkCanvas还有InkAnalyzer,我需要手写识别.
我创建了一个新的WPF应用程序并添加了以下参考:
在MainWindow.xaml.cs当我尝试创建一个新的InkCanvas时,我收到一个错误:
System.Exception:'应用程序调用了为不同线程编组的接口.(来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))'
public MainWindow()
{
InitializeComponent();
Windows.UI.Xaml.Controls.InkCanvas myPage = new Windows.UI.Xaml.Controls.InkCanvas();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法在WPF应用程序中使用UWP控件(特别是我的情况下的InkCanvas)?
我之前从未使用过InkCanvas
控件.我需要的是加载一个文件InkCanvas
,绘制一些涂鸦并得到结果图像.我想用获得的图像做一些额外的操作.
如我错了请纠正我.我找到了一个链接:http://www.centrolutions.com/Blog/post/2008/12/09/Convert-WPF-InkCanvas-to-Bitmap.aspx 根据帖子将加载图片考虑除了用户涂鸦.或者它只将涂鸦转换为位图?
如何使用OpenFileDialog加载图像?我不想使用ISF.
谢谢!
我正在开发一个涂料应用程序.我使用Canvas控件作为白板.
我想在WPF画布中使用InkCanvas类功能,意味着我想在Canvas上绘制一个自由形状.我怎样才能做到这一点 ?我也想保存为*.JPG
第二个问题是像我们在MS Paint中那样绘制字体?我可以在其中集成FontDialogBox吗?如果是,怎么样?
感谢您 !!!
Here is my wpf code
<InkCanvas x:Name="inkCanvas" Margin="9,325,210,193" Background="Azure"></InkCanvas>
And also there is a button
When pressing the button, i want to save image drawn to a file. here is my code
private void button1_Click(object sender, RoutedEventArgs e)
{
int margin = (int)inkCanvas.Margin.Left;
int width = (int)inkCanvas.ActualWidth - margin;
int height = (int)inkCanvas.ActualHeight - margin;
RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
rtb.Render(inkCanvas);
using (FileStream fs = new FileStream("path", FileMode.Create))
{
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(fs); …
Run Code Online (Sandbox Code Playgroud) 嗨,我不知道为什么它不起作用.看起来我无法在InkCanvas上使用此事件.
XAML
<Window x:Class="PolyLine.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">
<StackPanel >
<Button Name="Button1">Clear</Button>
<InkCanvas x:Name="MC" MouseLeftButtonDown="MC_MouseLeftButtonDown" MouseRightButtonDown="MC_MouseRightButtonDown" MouseMove="MC_MouseMove" Background="White" Height="300" Width="497" ></InkCanvas>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
代码背后
private void MC_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
polylinePoints.Add(e.GetPosition(MC));
}
Run Code Online (Sandbox Code Playgroud) 我正在为触摸屏创建一个简单的绘画应用程序,并且我一直在努力使用多点触控手势在墨画布内进行缩放和旋转,但我还没有找到解决方案。
有没有一种在inkcanvas中提供多点触控手势的简单方法?
我是WPF和Xaml的新手我不知道如何锚定如何停靠...在这个屏幕上灰色是statusBar停靠但网格和菜单并非所有组件都在画布中.这是XAML
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication6.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Grid x:Name="LayoutRoot">
<Canvas>
<StackPanel Height="40" Width="624" VerticalAlignment="Top" HorizontalAlignment="Center">
<Menu Height="39" Margin="1,0,0,0">
<Menu.Background>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFF6F6F6" Offset="0.25"/>
<GradientStop Color="#FFEAE8E8" Offset="0.25"/>
<GradientStop Color="#FFDCD9D9" Offset="0.8"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Menu.Background>
</Menu>
</StackPanel>
<StackPanel Height="356" Canvas.Top="44" Width="161" HorizontalAlignment="Left">
<Expander Header="Expander" Height="107">
<Grid Background="#FFE5E5E5"/>
</Expander>
</StackPanel>
<StackPanel Height="360" Canvas.Left="161" Canvas.Top="40" Width="463">
<DataGrid Height="361"/>
</StackPanel>
</Canvas>
<StackPanel Height="40" Margin="-1,0,0,0" VerticalAlignment="Bottom">
<StatusBar Height="40" Background="#FF897676"/>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我想向我的 UWP 应用程序添加一个按钮,以删除 中的所有笔划InkCanvas
,但建议的方法inkCanvas.InkPresenter.Strokes.Clear()
未被识别为有效命令,它是否已过时,或者我做错了什么?
我正在尝试在 WPF 中序列化墨水画布。所以我使用StrokeCollection.Save
将笔画保存到MemoryStream
. 但是当我尝试将流加载到InkCanvas
我得到一个ArgumentException
声明“ISF 数据的长度必须大于零”。
这是代码示例:
using (MemoryStream ms = new MemoryStream())
{
inkcanvas.Strokes.Save(ms);
inkcanvas.Strokes = new System.Windows.Ink.StrokeCollection(ms);
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
我在InkCanvas上画了一些墨水笔画,现在我想改变笔的颜色.我可以使用CopyDefaultDrawingAttributes和UpdateDefaultDrawingAttributes更改我绘制的任何其他笔划的颜色,并且工作正常.但是,如何更改已存在的笔画颜色StrokeContainer?我试过了:
foreach (InkStroke stroke in inkCanvas.InkPresenter.StrokeContainer.GetStrokes())
{
stroke.DrawingAttributes.Color = strokeColour;
};
Run Code Online (Sandbox Code Playgroud)
此代码执行时没有异常,但stroke.DrawingAttributes.Color仍显示以前的颜色.
有任何想法吗?
谢谢...
罗伯特