调整WriteableBitmap大小时获取整个黑色结果

时间:2012-12-10 16:09:29

标签: c# windows-phone-7 windows-phone-7.1 windows-phone

我发现我的问题在于我用来调整图片大小的方法: 这是代码:

 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;
        }

我在两种情况下测试了我的代码:

  1. 从“相机胶卷”中传递照片
  2. 从其他相册传递图片
  3. 我的代码可以处理“相机胶卷”图片,但它会为我从其他相册加载的图片返回一个完整的黑色结果。

    在上述任何一种情况下,尽管位图是全黑或不是,但这种方法会使位图返回正确的宽度和高度。

    对于这两种情况,我使用相同的方法来加载图片,但是为什么只能显示来自相机胶卷的图片,但是那些来自其他相册的图片却不能?

    我知道WriteableBitmapEx库有完美调整大小的方法。但我只是好奇为什么我的方法不起作用?任何人都能帮助我吗?

1 个答案:

答案 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=150origWidth=300,那么st.ScaleX 0.0 (不是 0.5 )。