Здесь я взять файл изображения и уменьшить его до 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# и разработке приложений Windows Store из ваших видео MVA и Channel9! :)
Это может быть любой язык. Изменение размера изображений не просто. Здесь есть несколько алгоритмов на языке C: https://github.com/MalcolmMcLean/babyxrc/tree/master/src –
Я использовал ImageMagick для этого в прошлом. Это было довольно просто https://magick.codeplex.com/ –
Возможно, посмотрите на методы ScaledHeight и ScaledWidth на BitmapTransform? https://msdn.microsoft.com/library/windows/apps/br226254#methods Не моя область, а просто Google-догадка. – JohnLBevan