调整可写位图大小时获得整个黑色结果



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

 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. 传递其他相册中的图片

我的代码将适用于"相机胶卷"图片,但它会为从其他相册加载的图片返回整个黑色结果。

在这两种情况下,尽管位图是否全黑,但此方法将向我返回正确的宽度和高度。

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

我知道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=150origWidth=300st.ScaleX将为 0.0(而不是 0.5)。

最新更新