我发现我的问题在于我用来调整图片大小的方法:代码如下:
private WriteableBitmap ResizeImage(BitmapImage original, double destWidth, double destHeight)
{
Image image = new Image()
{
Source = original,
Stretch = Stretch.UniformToFill
};
image.UpdateLayout();
int origWidth = original.PixelWidth;
int origHeight = original.PixelHeight;
ScaleTransform st = new ScaleTransform();
st.ScaleX = destWidth / (double)origWidth;
st.ScaleY = destHeight / (double) origHeight;
WriteableBitmap result = new WriteableBitmap((int)destWidth, (int)destHeight);
result.Render(image, st);
result.Invalidate();
return result;
}
我在两种情况下测试了我的代码:
- 通过"相机胶卷"中的图片
- 传递其他相册中的图片
我的代码将适用于"相机胶卷"图片,但它会为从其他相册加载的图片返回整个黑色结果。
在这两种情况下,尽管位图是否全黑,但此方法将向我返回正确的宽度和高度。
对于这两种情况,我使用相同的方法来加载图片,但是为什么只能显示相机胶卷中的图片,而来自其他相册的图片不能?
我知道WriteableBitmapEx库有完美调整大小的方法。但我只是好奇为什么我的方法不起作用?有人可以帮助我吗?
尝试以下操作:
private static BitmapSource ResizeImage(BitmapImage original, int destWidth, int destHeight)
{
if (original == null) return null;
if (destWidth == original.PixelWidth && destHeight == original.PixelHeight) return original;
return new TransformedBitmap(original, new ScaleTransform((double)destWidth / original.PixelWidth, (double)destHeight / original.PixelHeight));
}
我不确定 TransformedBitmap 是否在 Windows Phone 上可用...<小时 />顺便说一下,您正在执行整数除法:
st.ScaleX = destWidth / origWidth;
st.ScaleY = destHeight / origHeight;
例如,如果destWidth=150
和origWidth=300
则st.ScaleX
将为 0.0(而不是 0.5)。