0

画像のサイズを変更する関数を書いてみます。WinRT / Win8関数Resize();にWriteableBitmapExを使用します。

public class PictureExtension 
{
    private MemoryRandomAccessStream _memoryRandomAccessStream;
    private readonly Stream _dataStream;
    private readonly double _height;
    private readonly double _width;

    public PictureExtension(Stream dataStream, double height, double width)
    {
        _dataStream = dataStream;
        _memoryRandomAccessStream = (_dataStream.ToRandomAccessStream());
        _height = height;
        _width = width;
    }

    public byte[] ToArray(double maxSide)
    {
        if (_height <= maxSide && _width <= maxSide)
        {
            return _dataStream.ToArray();
        }
        else
        {
            var target = new WriteableBitmap((int) _width, (int) _height);

            var aspectRatio = (double)_width / _height;
            double newHeight;
            double newWidth;
            if (_width > _height)
            {
                newWidth = maxSide;
                newHeight = newWidth / aspectRatio;
            }
            else
            {
                newHeight = maxSide;
                newWidth = maxSide * aspectRatio;
            }

            int count = (int)_dataStream.Length;

            using (var bmpStream = target.PixelBuffer.AsStream())
            {
                bmpStream.Seek(0, SeekOrigin.Begin);
                bmpStream.Write(_dataStream.ToArray(), 0, _dataStream.ToArray().Length);
            }


            var resized = target.Resize((int)newWidth, (int)newHeight, WriteableBitmapExtensions.Interpolation.Bilinear);

            return resized.ToByteArray();

        }

    }
}

}

この関数はバイトの配列を返しますが、画像ではなくなりました。PNGおよびJPG形式でテストしました。何が問題なのですか。

4

3 に答える 3

1

CodePlex サイトの投稿をフォローするのが最善の方法です ;) http://writeablebitmapex.codeplex.com/discussions/399624

クロスポスティングの必要はありません。

于 2012-10-17T20:37:29.793 に答える
1

以前にこの問題を調べていたので、次のスレッドのコードを試してみてください:
How to resize Image in C# WinRT/winmd?

于 2012-10-17T07:44:45.807 に答える
0

それが役立つかどうかはわかりませんが、シナリオによっては、特定のデコード解像度でビットマップを読み込むように記述した LoadAsync() オーバーロードがあります。

http://winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/0657c67a93d5#WinRTXamlToolkit%2fImaging%2fWriteableBitmapLoadExtensions.cs

于 2012-10-16T20:53:42.200 に答える