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

2 つの状況でコードをテストしました。

  1. 「カメラロール」から写真を渡す
  2. 他のアルバムから写真を渡す

私のコードは「カメラ ロール」の写真では機能しますが、他のアルバムから読み込まれた写真については真っ黒な結果が返されます。

これらの状況のいずれにおいても、ビットマップが完全に黒かどうかに関係なく、このメソッドはビットマップの正しい幅と高さを返します。

これら 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));
}

TransformedBitmap が Windows Phone で利用できるかどうかはわかりません...


ところで、整数除算を実行しています。

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

たとえば、 ifdestWidth=150origWidth=300thenst.ScaleX0.0になります( 0.5ではありません)。

于 2012-12-10T18:05:00.967 に答える