私は、画像ファイルを取得し、100×100 SoftwareBitmap
にそれを縮小し、ImageSource
としてそれを返します。
あなたには既にSoftwareBitmap
がいるので、あなたの仕事はさらに簡単になると思います。しかし、これはあなたにアイデアを与えることを願っています
WritableBitmap
の場合は、PixelBuffer
の場合のみ、新たにスケールされたSoftwareBitmap
インスタンスを初期化する必要があります。我々は(ピクセルローカル変数)バイトの[]ピクセルデータから直接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 Storeアプリケーションを開発していると言わなければなりません! :)
これはどの言語でも可能です。画像のサイズ変更は簡単ではありません。 C言語のアルゴリズムがいくつかあります:https://github.com/MalcolmMcLean/babyxrc/tree/master/src –
私は過去にこれを行うためにImageMagickを使用しました。それはまっすぐに正直だったhttps://magick.codeplex.com/ –
BitmapTransformのScaledHeightとScaledWidthメソッドを見たことがありますか? https://msdn.microsoft.com/library/windows/apps/br226254#methods私のエリアではないので、Googleだけの推測です。 – JohnLBevan