c # - Konverter SurfaceImageSource til PNG

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et billede SurfaceImageSource, og jeg konverterer det til PNG.
Jeg forsøgte at bruge dette projekt:
link [5]


Jeg forsøgte at bruge SharpDX bibliotek, men jeg lykkedes ikke.


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

                           //.....//
                 }

Bedste reference


Prøven du linkede handler om 'Sådan gemmes SurfaceImageSource mål som et billede i Universal app', hvilket er lige hvad du vil. Den opretter en C ++ Windows Runtime Component kaldet 'MyImageSourceComponent' og giver en lukket klasse med navnet 'MyImageSource', som indeholder metoden public void SaveSurfaceImageToFile(IRandomAccessStream randomAccessStream); Du kan kalde denne metode til at gemme SurfaceImageSource til png. [6] [7]]] [8]


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


Selv om denne prøve er til Windows 8.1, skal den også kunne arbejde med dinp app. Jeg har hjulpet konvertere prøven til din app, her kan du henvise til. Jeg har oprettet en ny joup app med en Windows runtime komponent og refererer koden til 'MyImageSouceComponent' i prøven. Tilføj derefter runtime komponenten som reference til joup projektet. Til sidst bruger ovenstående kode til SaveSurfaceImageToFile metoden. [9]