0

我从 PhotoChooserTask 中读取了一张图片,并有一张照片流。我必须减小图像的大小

我写这段代码

            WriteableBitmap writeableBitmap = new WriteableBitmap(400, 400);
            writeableBitmap.LoadJpeg(stream);

            using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (isoFile.FileExists("Myfile.jpg")) isoFile.DeleteFile("Myfile.jpg");
                using (var filestream = isoFile.CreateFile("Myfile.jpg"))
                {
                    writeableBitmap.SaveJpeg(filestream, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 100);
                }
            }

此代码不保持图像的纵横比。

怎么做?

4

2 回答 2

0

首先将源图像加载到 writeableBitmap(不调整大小)。

然后得到源宽度(PixelWidth)和全高(PixelHeight)。将 PixelWidth 与 PixelHeight 相除将为您提供比率。您可以在调整大小时使用此值。

所以:

float aspectRatio = (float) writeableBitmap.PixelWidth / writeableBitmap.PixelHeight;

然后在保存时就做

writeableBitmap.SaveJpeg(filestream, ResizedWidthValue, (int) ResizedWidthValue / aspectRatio, 0, 100);
于 2014-05-22T11:22:00.893 回答
0

@ertay

我正在写这段代码

using (var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    WriteableBitmap wb = BitmapFactory.New(0, 0);
                    wb.FromStream(isolatedStorage.OpenFile("1.jpg", FileMode.Open, FileAccess.Read));

                    IsolatedStorageFileStream fileStream= isolatedStorage.CreateFile("1_thumb.jpg");

                    float aspectRatio = (float)wb.PixelWidth / wb.PixelHeight;

                    wb.SaveJpeg(fileStream, 200, (int) (200 / aspectRatio), 0, 100);

                    fileStream.Close();
                    wb = null;

                }

但是 wb.PixelWidth 和 wb.PixelHeight = 0!!

为什么?

于 2014-05-27T13:37:51.577 回答