Windows phone 8 可写位图纵横比保存图像

Windows phone 8 可写位图纵横比保存图像,windows-phone-8,writablebitmap,Windows Phone 8,Writablebitmap,我从PhotoChooserTask中读取了一幅图像,并得到了一张照片流。 我必须缩小图像的大小 我写这个代码 WriteableBitmap writeableBitmap = new WriteableBitmap(400, 400); writeableBitmap.LoadJpeg(stream); using (var isoFile = IsolatedStorageFile.GetUserStoreForAp

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

                }
此代码不保留图像的纵横比


如何制作?

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

然后获取源宽度(PixelWidth)和全高(PixelHeight)。将PixelWidth除以PixelHeight将得到该比率。调整大小时可以使用此值

因此:

那么当你存钱的时候就做吧

writeableBitmap.SaveJpeg(filestream, ResizedWidthValue, (int) ResizedWidthValue / aspectRatio, 0, 100);
@埃尔泰

我正在写这段代码

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


为什么?

WriteableBitmap WriteableBitmap=new WriteableBitmap();不可能。请打开Nuget并获取WriteableBitmapEx。然后使用WriteableBitmap WriteableBitmap=BitmapFactory.New(0,0);