我发现我的问题在于我用来调整图片大小的方法: 这是代码:
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库有完美调整大小的方法。但我只是好奇为什么我的方法不起作用?任何人都能帮助我吗?
答案 0 :(得分:0)
尝试以下方法:
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));
}
我不确定TransteredBitmap是否在Windows Phone上可用...
<小时/> 顺便说一下,你正在进行整数除法:
st.ScaleX = destWidth / origWidth;
st.ScaleY = destHeight / origHeight;
例如,如果destWidth=150
和origWidth=300
,那么st.ScaleX
将 0.0 (不是 0.5 )。