I try to write function that will be resize images. I use WriteableBitmapEx for WinRT/Win8 function Resize();
public class PictureExtension
{
private MemoryRandomAccessStream _memoryRandomAccessStream;
private readonly Stream _dataStream;
private readonly double _height;
private readonly double _width;
public PictureExtension(Stream dataStream, double height, double width)
{
_dataStream = dataStream;
_memoryRandomAccessStream = (_dataStream.ToRandomAccessStream());
_height = height;
_width = width;
}
public byte[] ToArray(double maxSide)
{
if (_height <= maxSide && _width <= maxSide)
{
return _dataStream.ToArray();
}
else
{
var target = new WriteableBitmap((int) _width, (int) _height);
var aspectRatio = (double)_width / _height;
double newHeight;
double newWidth;
if (_width > _height)
{
newWidth = maxSide;
newHeight = newWidth / aspectRatio;
}
else
{
newHeight = maxSide;
newWidth = maxSide * aspectRatio;
}
int count = (int)_dataStream.Length;
using (var bmpStream = target.PixelBuffer.AsStream())
{
bmpStream.Seek(0, SeekOrigin.Begin);
bmpStream.Write(_dataStream.ToArray(), 0, _dataStream.ToArray().Length);
}
var resized = target.Resize((int)newWidth, (int)newHeight, WriteableBitmapExtensions.Interpolation.Bilinear);
return resized.ToByteArray();
}
}
}
}
This function return array of byte but it is not image any more.. I tested with PNG and JPG formats.. What's wrong?
I've been examining this problem before, try the code in this thread:
How to resize Image in C# WinRT/winmd?