如何在 UWP 应用中裁剪位图?

dom*_*har 1 c# pdf bitmap syncfusion uwp

有很多类似的问题,但似乎没有一个能回答我的问题。

我正在开发一个 UWP 应用程序(使用 Syncfusion),它可以生成一些 PDF。对于这个PDF,我需要得到一些Syncfusion.Pdf.Graphics.PdfBitmap,但在此之前,我需要稍微裁剪一下。

这就是我正在做的,我得到我的图表并将其转换为 PdfBitmap:

 var diagramBitmap = new PdfBitmap(diagram);
Run Code Online (Sandbox Code Playgroud)

然后我需要通过以下方式将其绘制为 PDF:

 document.Pages[0].Graphics.DrawImage(diagramBitmap, x, y, width, height);
Run Code Online (Sandbox Code Playgroud)

问题是,我发现的所有解决方案都不能在 UWP 中轻松地在绘制该 PdfBitmap 之前对其进行裁剪。我在没有裁剪图表的情况下解决了这个问题,它可以工作,但是裁剪它是更好更好的解决方案。

感谢您的帮助或建议!

PEK*_*PEK 8

此代码从现有的 SoftwareBitmap 创建一个新的裁剪 SoftwareBitmap。如果图像已经在内存中,则很有用。

    async public static Task<SoftwareBitmap> GetCroppedBitmapAsync(SoftwareBitmap softwareBitmap, 
            uint startPointX, uint startPointY, uint width, uint height)
    {            
        using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
        {
            BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);

            encoder.SetSoftwareBitmap(softwareBitmap);

            encoder.BitmapTransform.Bounds = new BitmapBounds()
            {
                X = startPointX,
                Y = startPointY,
                Height = height,
                Width = width
            };

            await encoder.FlushAsync();

            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

            return await decoder.GetSoftwareBitmapAsync(softwareBitmap.BitmapPixelFormat, softwareBitmap.BitmapAlphaMode);
        }
    }
Run Code Online (Sandbox Code Playgroud)