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?
我不知所措。谢谢。
请注意,我不是指BitmapImage
;我的意思是SoftwareBitmap
。
答案 0 :(得分:2)
看起来像拐杖,但它可能会解决您的问题:
{{1}}
你必须从nuget获得Win2D软件包。
答案 1 :(得分:2)
我已经使用 ScaleEffect 进行了一些尝试,并以下面的扩展方法结束。事实上,该方法需要更多的工作,但它可能会帮助你以某种方式进一步发展。
@Html.CheckBoxFor(m => m.newsletterOptin, new Dictionary<string, object>() {
{ "id", "newsletterOptin" },
{ "checked", "@(Model.newsletterOptin ? true : false)" }
})
答案 2 :(得分:1)
在这里,我拍摄一张图片文件并将其缩小为100x100 SoftwareBitmap
并将其作为ImageSource
返回。
由于您已经拥有SoftwareBitmap
,我认为您的任务会更加轻松。但希望这会给你一个想法。
初始化新缩放的WritableBitmap
实例时,我们只需要PixelBuffer
SoftwareBitmap
。如果您可以从我们拥有的byte []像素数据(像素局部变量)直接创建IBuffer,您可以直接将其提供给SoftwareBitmap.CreateCopyFromBuffer()
方法。在这种情况下无需WritableBitmap
。
以下是代码:
private async Task<ImageSource> ProcessImageAsync(StorageFile ImageFile)
{
if (ImageFile == null)
throw new ArgumentNullException("ImageFile cannot be null.");
//The new size of processed image.
const int side = 100;
//Initialize bitmap transformations to be applied to the image.
var transform = new BitmapTransform() { ScaledWidth = side, ScaledHeight = side, InterpolationMode = BitmapInterpolationMode.Cubic };
//Get image pixels.
var stream = await ImageFile.OpenStreamForReadAsync();
var decoder = await BitmapDecoder.CreateAsync(stream.AsRandomAccessStream());
var pixelData = await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, transform, ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb);
var pixels = pixelData.DetachPixelData();
//Initialize writable bitmap.
var wBitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
await wBitmap.SetSourceAsync(stream.AsRandomAccessStream());
//Create a software bitmap from the writable bitmap's pixel buffer.
var sBitmap = SoftwareBitmap.CreateCopyFromBuffer(wBitmap.PixelBuffer, BitmapPixelFormat.Bgra8, side, side, BitmapAlphaMode.Premultiplied);
//Create software bitmap source.
var sBitmapSource = new SoftwareBitmapSource();
await sBitmapSource.SetBitmapAsync(sBitmap);
return sBitmapSource;
}
PS。我知道这句话不应该是答案的一部分,但我必须说我已经学到了很多关于XAML / C#和从MVA和Channel9视频开发Windows应用商店应用的知识! :)