将SurfaceImageSource转换为PNG

时间:2017-01-26 00:27:18

标签: c# windows uwp directx

我有一个图像SurfaceImageSource,我会将其转换为PNG。 我试着用这个项目: link

我尝试使用SharpDX库,但我没有成功。

                 private void initialize()
                 {
                        StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists);
                        StorageFile imagePng = await folder.CreateFileAsync("file.png", CreationCollisionOption.ReplaceExisting);

                        if (imagePng != null)
                        {
                            //surfaceImageSource to PNG method
                            surfaceToPng(surfaceImage,imagePng);
                        }
                 }

                 private void surfaceToPng(SurfaceImageSource surface,StorageFile imagePng){
                        IRandomAccessStream stream = await imagePng.OpenAsync(FileAccessMode.ReadWrite);

                           //.....//
                 }

1 个答案:

答案 0 :(得分:1)

您链接的sample是关于“如何将SurfaceImageSource目标保存为通用应用中的图像”,这正是您想要的。它创建一个名为“MyImageSourceComponent”的C ++ Windows Runtime Component并提供一个名为“MyImageSource”的密封类,其中包含方法public void SaveSurfaceImageToFile(IRandomAccessStream randomAccessStream);您可以调用此方法将SurfaceImageSource保存到png。

 uint imageWidth;
 uint imageHeight;
 MyImageSource myImageSource;
 public MainPage()
 {
     this.InitializeComponent();

     imageWidth = (uint)this.MyImage.Width;
     imageHeight = (uint)this.MyImage.Height;
     myImageSource = new MyImageSource(imageWidth, imageHeight, true);
     this.MyImage.Source = myImageSource;
 }

 private async void btnSave_Click(object sender, RoutedEventArgs e)
 {   
     FileSavePicker savePicker = new FileSavePicker();
     savePicker.FileTypeChoices.Add("Png file", new List<string>() { ".png" });
     savePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
     StorageFile file = await savePicker.PickSaveFileAsync();
     if (file != null)
     {
         IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite);
         myImageSource.SaveSurfaceImageToFile(stream);
     }
 }

虽然此示例适用于Windows 8.1,但它也应该能够与uwp应用程序一起使用。我帮助将示例转换为您可以参考的uwp app here。我创建了一个带有Windows运行时组件的新uwp应用程序,并引用了示例中“MyImageSouceComponent”的代码。然后添加运行时组件作为uwp项目的引用。最后使用上面的代码调用SaveSurfaceImageToFile方法。