在我的WPF应用程序中,我有一些绘图功能.我已经使用Canvas和手动处理鼠标手势解决了这个问题,我还将绘制的Strokes(包装在InkPresenter中)添加到此Canvas中.
使用Blend我突然发现有一种叫做InkCanvas的东西.根据Blend的说法,这是一个"定义接收和显示墨水笔划的区域"的控件.,这听起来与我所做的相关.但是使用普通的Canvas,一切似乎都运行良好.
所以; InkCanvas与普通Canvas有何不同,为什么我应该选择使用它呢?
该RenderTargetBitmap简单的帆布+ InkManager(在Windows 8.1)的工作类别,呈现墨水笔划的图像.UWP推出了InkCanvas和一个新的Inking API.但是,它似乎RenderTargetBitmap
不起作用.当我尝试使用RenderAsync
方法捕获墨迹笔划时,没有墨迹笔划仅渲染其他对象,如Rectangle等.
这是一个错误还是这个新的API不是以这种方式使用的?如果没有,那我怎样才能渲染图像InkCanvas
?
谢谢!
我在我的UWP应用程序中有一个InkCanvas,并希望显示一个图像(理想情况下是Canvas的一部分,但除此之外,以某种方式覆盖它(我的想法是我可以将更改的图像保存回图像文件). WPF似乎允许InkCanvas有孩子,但在UWP似乎不可能.我尝试了以下内容:
<InkCanvas x:Name="drawInkCanvas">
<Image Source="{Binding DrawingImage}"/>
</InkCanvas>
Run Code Online (Sandbox Code Playgroud)
但这不起作用; 我也试过这个:
<Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2">
<InkCanvas x:Name="drawInkCanvas" Opacity=".5"/>
<Image Source="{Binding DrawingImage}" Opacity=".5"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
公平地说,我对此没有太大的期望; 无论如何,虽然它确实有点工作,但它使图像和InkCanvas看起来都不对,显然,我不允许保存生成的图像.
理想情况下,会有背景图像或类似的东西.有什么我可以用来实现这一目标; 我认为我可能不得不用标准画布替换InkCanvas,然后重新编写所有InkCanvas功能!
我想添加WPF路径InkCanvas
并使用选择来选择WPF路径.所以,我使用这段代码.
System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
inkCanvas.Children.Add(path);
Run Code Online (Sandbox Code Playgroud)
这是输出.我必须从0,0中选择WPF Path,因为Actualwidth
它ActualHeight
从0,0开始.
如何选择绝对WPF路径?
谢谢
编辑:
现在,我可以使用此代码绝对选择它.
System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
path.Margin = new Thickness(-getMinX(path), -getMinY(path), 0, 0);
containPath.Children.Add(path);
containPath.Width = getMaxX(path) - getMinX(path);
containPath.Height = getMaxY(path) - getMinY(path);
containPath.Margin = new Thickness(getMinX(path), getMinY(path), 0, 0);
inkCanvas.Children.Add(containPath);
Run Code Online (Sandbox Code Playgroud) 使用通用Windows平台(UWP)使用InkCanvas控件我似乎无法确定在使用InkCanvas时擦除墨迹笔划的正确方法 - 可以处理事件"StrokeErased".
理想情况下,将使用"InkCanvas.EditingMode"值设置为"InkCanvasEditingMode.EraseByPoint"或"InkCanvasEditingMode.EraseByStroke"的"InkCanvasEditingMode",但这些在Windows 10下的InkCanvas中不可用.
示例https://github.com/Microsoft/Windows-universal-samples/tree/master/simpleink提到"擦除墨迹笔划",但该示例只处理StrokeErased事件而没有实际支持擦除它们,我可以看到,我错过了什么?
我好像遇到了路障.我们正在使用带有Prism的MVVM,并且拥有一个需要Ink Canvas的View.我创建了一个从我的ViewModel绑定到View的StrokeCollection.我可以从我的viewmodel设置集合,但是当用户绘制时,更改不会出现在ViewModel中.有没有办法让这项工作?
我的ViewModel中的My Property如下:
private StrokeCollection _strokes;
public StrokeCollection Signature
{
get
{
return _strokes;
}
set
{
_strokes = value;
OnPropertyChanged("Signature");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的XAML绑定线:
<InkCanvas x:Name="MyCanvas" Strokes="{Binding Signature, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)
出于某种原因,显然InkCanvas从未通知ViewModel任何变化.
我有一个WPF InkCanvas控件,我用它来捕获我的应用程序中的签名.控件看起来像这样 - 它是700x300
alt text http://img156.imageshack.us/img156/7885/inkcanvas.jpg
但是,当我将其保存为JPG时,生成的图像看起来像这样,也是700x300
替代文字http://img210.imageshack.us/img210/5668/saved.jpg
我用来保存的代码
sigPath = System.IO.Path.GetTempFileName();
MemoryStream ms = new MemoryStream();
FileStream fs = new FileStream(sigPath, FileMode.Create);
RenderTargetBitmap rtb = new RenderTargetBitmap((int)inkSig.Width, (int)inkSig.Height, 96d, 96d, PixelFormats.Default);
rtb.Render(inkSig);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(fs);
fs.Close();
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的XAML:
<Window x:Class="Consent.Client.SigPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Transparent" Topmost="True" AllowsTransparency="True"
Title="SigPanel" Left="0" Top="0" Height="1024" Width="768" WindowStyle ="None" ShowInTaskbar="False" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" >
<Border BorderThickness="1" BorderBrush="Black" Background='#FFFFFFFF' x:Name='DocumentRoot' Width='750' Height='400' CornerRadius='10'>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Name="txtLabel" FontSize="24" HorizontalAlignment="Center" >Label</TextBlock>
<InkCanvas Opacity="1" Background="Beige" …
Run Code Online (Sandbox Code Playgroud) 我正在做一个 OCR 项目。我必须从inkcanvas 中的输入中获取图像以在下一步中进行处理,即将该图像转换为二维数组。
我对如何从inkcanvas 获取位图图像进行处理感到困惑。我一直在从许多来源寻找解决方案,但其中很多只是将inkcanvas 保存到文件流中。
请帮我!非常感谢
在我的应用程序中,我有一个InkCanva
背景带有图像的 s 。InkCanvas
当我在底部或左侧边缘绘制时,InkCanvas
会更改大小以适合草图,这会扰乱背景中图像的渲染。InkCanvas
当笔划超出其当前大小时,如何阻止调整大小?
当前的 XAML:
<InkCanvas x:Name="DrawingArea"
Width="Auto"
Height="Auto"
ClipToBounds="True"
Background="{x:Null}" />
Run Code Online (Sandbox Code Playgroud)
有没有办法将UWP InkCanvas中的InkStrokes保存为SVG?
我已经将它们保存为'GifWithEmbeddedIsf'格式,这对于在另一个InkCanvas中重新加载墨迹数据很有用,但我的问题是当我使用Gif在Web客户端中显示Ink Strokes时.此Gif与在UWP应用程序中显示InkStrokes的质量不同[在放大时尤为明显].
我已经在WPF应用程序中找到了这个答案,但UWP中没有相同的API [或者我还没有找到它].