Проблема с рендерингом WriteableBitmap из изображения в Silverlight
У меня есть следующая проблема, мне нужно преобразовать массив байтов в WriteableBitmap
с изменением размера. Я пишу следующий код.
private byte[] ResizeImage(byte[] array, double maxWidth, double maxHeight)
{
WriteableBitmap wb = null;
var stream = new MemoryStream(array);
stream.Seek(0, SeekOrigin.Begin);
var bmp = new WriteableBitmap(0, 0);
bmp.SetSource(stream);
stream.Close();
var img = new Image();
img.Source = bmp;
double scaleX = 1;
double scaleY = 1;
if (bmp.PixelHeight > maxHeight)
{
scaleY = maxHeight / bmp.PixelHeight;
}
if (bmp.PixelWidth > maxWidth)
{
scaleX = maxWidth / bmp.PixelWidth;
}
wb = new WriteableBitmap(0, 0);
var scale = Math.Min(scaleY, scaleX);
wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
wb.Invalidate();
return Utils.Encode(wb);
}
После звонка wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
, wb
имеет ноль пикселей.
Помогите, пожалуйста.
2 ответа
private byte[] ResizeImage(byte[] array, int maxWidth, int maxHeight)
{
var stream = new MemoryStream(array);
stream.Seek(0, SeekOrigin.Begin);
var bmp = new BitmapImage();
bmp.SetSource(stream);
stream.Close();
var img = new Image();
img.Source = new BitmapImage();
double scaleX = 1;
double scaleY = 1;
if (bmp.PixelHeight > maxHeight)
{
scaleY = maxHeight / bmp.PixelHeight;
}
if (bmp.PixelWidth > maxWidth)
{
scaleX = maxWidth / bmp.PixelWidth;
}
WriteableBitmap wb = new WriteableBitmap(maxWidth, maxHeight);
var scale = Math.Min(scaleY, scaleX);
wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });
wb.Invalidate();
return Utils.Encode(wb);
}
Попробуйте изменить:
wb = new WriteableBitmap(0, 0);
Для того, чтобы:
wb = new WriteableBitmap(maxWidth, maxHeight);