none
Windows store app保存图片到文件失败 RRS feed

  • 问题

  • 我选择了一个大的png图片200x200贴在Image上,Image大小为100x100,所以我设置了DecodePixelWidth和DecodePixelHeight都为100,图片在Image上显示正常。

    接下来,我又把Image的图片通过Source取出来,尝试写入到一个名为test.png的图片文件中,写入过程没有异常,但生成的图片是黑色的。

    // 如下代码把通过FileOpenPicker选取一张200x200的png图片贴在Image控件上,Image设置的大小为100x100,图片显示正常。

    BitmapImage bmp = new BitmapImage();
    bmp.DecodePixelWidth = 100;
    bmp.DecodePixelHeight = 100;
    bmp.DecodePixelType = DecodePixelType.Physical;
    Stream stream = await FolderFilePicker.GetInstance().PickerPicture;
    await bmp.SetSourceAsync(stream.AsRandomAccessStream());
    image_100x100.Source = bmp;// 设置Image控件图片源

    // 以下代码把Image控件中的图片取出写入到text.png文件中,写的过程没有异常,但生成的图片是一片漆黑

    BitmapImage bitmapImage = (BitmapImage)image_100x100.Source;// 取出Image控件中的图片

    WriteableBitmap wbmp = new WriteableBitmap(bitmapImage.DecodePixelWidth, bitmapImage.DecodePixelHeight); StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.png", CreationCollisionOption.ReplaceExisting); using (IRandomAccessStream streamwrite = await file.OpenAsync(FileAccessMode.ReadWrite)) { BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, streamwrite); Stream pixelStream = wbmp.PixelBuffer.AsStream(); byte[] pixels = new byte[pixelStream.Length]; await pixelStream.ReadAsync(pixels, 0, pixels.Length); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)wbmp.PixelWidth, (uint)wbmp.PixelHeight, 96.0, 96.0, pixels); await encoder.FlushAsync(); }






    • 已编辑 oneonce 2015年4月18日 6:06
    2015年4月17日 16:03

答案

全部回复