如何在WPF画布上绘制自由手形状(随机)并打印文本

3

我正在开发一款画图应用程序。我使用Canvas控件作为白板。

我想在WPF Canvas中使用InkCanvas类型的功能,这意味着我想在Canvas上自由绘制形状。我该怎么做?我还想将其保存为*.JPG文件。

第二个问题是如何像我们在MS Paint中所做的那样绘制字体?我可以集成FontDialogBox吗?如果可以,怎么做?

感谢您!

1个回答

9
以下是在画布上绘制直线并添加textBlock对象的简单示例:
示例:
    <StackPanel>
      <Canvas MouseLeftButtonDown="myCanvas_MouseLeftButtonDown" MouseMove="myCanvas_MouseMove"
x:Name="inkCanvas" Width="400" Height="200"> </Canvas>
      <Button Height="20" Width="30" x:Name="AddTextBtn" Click="AddTextBtn_Click">AddText</Button>
    </StackPanel>

代码后端:

private Point _startPoint;
private Polyline _line;

private void myCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
  _startPoint = e.GetPosition(myCanvas);
  _line = new Polyline();
  _line.Stroke = new SolidColorBrush(Colors.Black);
  _line.StrokeThickness = 2.0;

  myCanvas.Children.Add(_line);
}

private void myCanvas_MouseMove(object sender, MouseEventArgs e)
{
  if (e.LeftButton == MouseButtonState.Pressed)
  {
    Point currentPoint = e.GetPosition(myCanvas);
    if (_startPoint != currentPoint)
    {
        _line.Points.Add(currentPoint);
    }
  } 
}

private void AddTextBtn_Click(object sender, RoutedEventArgs e)
{
  // Show Font Dialog Box

  TextBlock tb = new TextBlock();
  tb.FontFamily = new FontFamily("Arial");
  tb.FontSize = 14;
  tb.Text = "SampleText";

  // Set position on canvas:
  Canvas.SetTop(tb,100);
  Canvas.SetLeft(tb, 50);

  myCanvas.Children.Add(tb);
}

但是没有纯WPF字体选择器。您可以使用WinForms中的字体选择器或者查看很多纯Xaml实现的字体选择器,例如此链接

保存为jpg格式:使用RenderTargetBitmap或CroppedBitmap;请参考此处SO链接


谢谢您的回答,那么关于在“画布”上进行手绘,我不想使用InckCanvas呢? - Xyroid
我已经更新了我的答案,并附上了一个基本示例: 在mousemove事件期间,您可以将当前点添加到在画布上绘制的折线中...希望对您有所帮助。 - SvenG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接