首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF :如何将笔画集合保存为位图?

WPF :如何将笔画集合保存为位图?
EN

Stack Overflow用户
提问于 2016-12-31 14:21:10
回答 1查看 1.1K关注 0票数 1

我使用InkCanvas来实现签名功能。

签名后,我可以使用RenderTargetBitmap类将签名图保存为位图。

但是RenderTargetBitmap总是保存InkCanvas本身,这意味着不能只保存签名内容。

我的问题是,如何将StrokeCollection保存为位图?

EN

回答 1

Stack Overflow用户

发布于 2017-01-10 04:16:18

我认为你应该使用Win2D (Win2D.uwp NuGet package),它非常简单。代码如下:

代码语言:javascript
复制
        async void SaveAsBitmap(object sender, RoutedEventArgs e)
    {
        //copy from origianl canvas and paste on the new canvas for saving
        var strokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();
        //check if canvas is not empty
        if (strokes.Count == 0) return;

        //select all the strokes to be copied to the clipboard
        foreach (var stroke in strokes)
        {
            stroke.Selected = true;
        }
        inkCanvas.InkPresenter.StrokeContainer.CopySelectedToClipboard();

        //paste the strokes to a new InkCanvas and move the strokes to the topper left corner 
        var newCanvas = new InkCanvas();
        newCanvas.InkPresenter.StrokeContainer.PasteFromClipboard(new Point(0, 0));

        //using Win2D to save ink as png
        CanvasDevice device = CanvasDevice.GetSharedDevice();
        CanvasRenderTarget renderTarget = new CanvasRenderTarget(device,
            (int)inkCanvas.InkPresenter.StrokeContainer.BoundingRect.Width,
            (int)inkCanvas.InkPresenter.StrokeContainer.BoundingRect.Height,
            96);

        using (var ds = renderTarget.CreateDrawingSession())
        {
            //ds.Clear(Colors.White); //uncomment this line for a white background
            ds.DrawInk(newCanvas.InkPresenter.StrokeContainer.GetStrokes());
        }

        //save file dialog
        var savePicker = new Windows.Storage.Pickers.FileSavePicker()
        {
            SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary
        };
        savePicker.FileTypeChoices.Add("Image file", new List<string>() { ".jpeg", ".png" });
        savePicker.SuggestedFileName = "mysign.png";
        var file = await savePicker.PickSaveFileAsync();

        if (file != null)
        {
            using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
            {
                await renderTarget.SaveAsync(fileStream, CanvasBitmapFileFormat.Png);
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41406008

复制
相关文章

相似问题

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