有BitmapTransform and BitmapDecoder类,其中功能允许您裁剪图像。但是我没有使它们与RenderTargetBitmap一起工作,每次在HRESULT上碰撞时:0x88982F50异常时尝试将像素数据从一个源传递到另一个源。
至于不同的方法,我可以考虑带大枪和Win2D实施它。它可能不是最方便的解决方案,但它的工作:
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(element, width, height);
var pixels = await renderTargetBitmap.GetPixelsAsync();
var currentDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
var device = CanvasDevice.GetSharedDevice();
var imageSource = new CanvasImageSource(device, width, height, currentDpi);
using (var drawingSession = imageSource.CreateDrawingSession(Colors.Transparent))
using (var bitmap = CanvasBitmap.CreateFromBytes(
drawingSession, pixels.ToArray(), width, height,
DirectXPixelFormat.B8G8R8A8UIntNormalized, drawingSession.Dpi))
{
var cropEffect = new CropEffect
{
Source = bitmap,
SourceRectangle = cropRect,
};
drawingSession.DrawImage(cropEffect);
}
ResultImage.Source = imageSource;
请注意,我不是Win2D expret,有人更了解可能要改正这个代码。
我知道你采取了什么样的道路,因为我经历了完全相同的问题。我目前也依靠Win2D,但我认为这非常黑客。感谢您花时间尝试一下。 –