如何调整 SoftwareBitmap 的大小?

Jer*_*xon 4 c# uwp

SoftwareBitmap是 UWP 中的新内容。我从这个开始:

var softwareBitmap = EXTERNALVALUE;

// do I even need a writeable bitmap?
var writeableBitmap = new WriteableBitmap(softwareBitmap.PixelWidth, softwareBitmap.PixelHeight);
softwareBitmap.CopyToBuffer(writeableBitmap.PixelBuffer);

// maybe use BitmapDecoder?
Run Code Online (Sandbox Code Playgroud)

我很茫然。谢谢。

请注意,我的意思不是BitmapImage;我是说SoftwareBitmap

Rom*_*asz 6

我已经对ScaleEffect进行了一些尝试,并以下面的扩展方法结束。事实上,该方法还需要更多的工作,但也许它会以某种方式帮助你走得更远。

public static SoftwareBitmap Resize(this SoftwareBitmap softwareBitmap, float newWidth, float newHeight)
{
    using (var resourceCreator = CanvasDevice.GetSharedDevice())
    using (var canvasBitmap = CanvasBitmap.CreateFromSoftwareBitmap(resourceCreator, softwareBitmap))
    using (var canvasRenderTarget = new CanvasRenderTarget(resourceCreator, newWidth, newHeight, canvasBitmap.Dpi))
    using (var drawingSession = canvasRenderTarget.CreateDrawingSession())
    using (var scaleEffect = new ScaleEffect())
    {
        scaleEffect.Source = canvasBitmap;
        scaleEffect.Scale = new System.Numerics.Vector2(newWidth / softwareBitmap.PixelWidth, newHeight / softwareBitmap.PixelHeight);
        drawingSession.DrawImage(scaleEffect);
        drawingSession.Flush();
        return SoftwareBitmap.CreateCopyFromBuffer(canvasRenderTarget.GetPixelBytes().AsBuffer(), BitmapPixelFormat.Bgra8, (int)newWidth, (int)newHeight, BitmapAlphaMode.Premultiplied);
    }
}
Run Code Online (Sandbox Code Playgroud)