2

我来这里是为了解决一个未解决的小问题。也许我没有找到正确的东西,因为我还没有找到解决方案,我希望你能提供帮助。

所以我有一个加载图像的 WPF 应用程序,在这里我没有问题。接下来我必须通过点击添加一些点,所以我有这个功能:

 private void ClickMouse(object sender, MouseButtonEventArgs e)
    {
        Point p = e.GetPosition(this);
        schema.PointFromScreen(p);
        var myImage3 = new Image();
        var bi3 = new BitmapImage();
        bi3.BeginInit();
        bi3.UriSource = new Uri(_clickImagePath, UriKind.Relative);
        bi3.EndInit();
        myImage3.Stretch = Stretch.Fill;
        myImage3.Source = bi3;
        myImage3.MinWidth = 30;
        myImage3.MinHeight = 30;
        myImage3.Width = 30;
        myImage3.Height = 30;
        myImage3.Name = _pointName;
        var oMargin = new Thickness(p.X, p.Y, 0, 0);
        myImage3.Margin = oMargin;
        mainCanva.Children.Add(myImage3);
        _listImg.Add(myImage3);
        PointList.Items.Add(_pointName);
    }

问题不在这里,但我需要一个上下文。

现在讨论主要问题。我必须保存最终图像才能制作 PDF。我使用我在这里找到的一段示例代码(http://stackoverflow.com/questions/1824989/how-to-store-system-windows-controls-image-to-local-disk)使用转换为 jpg 文件ITextsharp。我在 PDF 上唯一的东西是第一张图片,所以我承认它可能只需要第一张图像而不是其他创建的图像,但我真的不知道如何修复它。是否存在一些功能来制作图像区域的屏幕截图?或者也许要注意主体 Control.Image 区域中的所有图像?

谢谢您的帮助。

4

1 回答 1

1

您应该使用以下代码将 Canvas 呈现为图像:

var rect = new Rect(canvas.RenderSize);
var rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, 96d, 96d, System.Windows.Media.PixelFormats.Default);
rtb.Render(canvas);
//encode as PNG
varpngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));

//save to memory stream
using(var ms = new System.IO.MemoryStream())
{
    pngEncoder.Save(ms);

    System.IO.File.WriteAllBytes("logo.png", ms.ToArray());
}

(来源:将 WPF 输出写入图像文件

于 2012-07-27T12:04:27.623 回答