1

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

 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 库有完美调整大小的方法。但我只是好奇为什么我的方法不起作用?任何人都可以帮助我吗?

4

1 回答 1

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

我不确定 Windows Phone 上是否可以使用 TransformedBitmap ......


顺便说一句,您正在执行整数除法:

st.ScaleX = destWidth / origWidth;
st.ScaleY = destHeight / origHeight;

例如, ifdestWidth=150origWidth=300thenst.ScaleX将是0.0(不是0.5)。

于 2012-12-10T18:05:00.967 回答