有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,但我認爲這非常黑客。感謝您花時間嘗試一下。 –