2013-06-06 12 views
5

Chcę zapisać jeden obraz wewnątrz schowka w winrt do pliku. ale nie znalazłem sposobu. czy możesz pomóc, proszę?Zapisywanie formularza obrazu Schowek

var dataPackage = Clipboard.GetContent(); 
      var t = await dataPackage.GetBitmapAsync(); 
      var t2 = await t.OpenReadAsync(); 
      t2.AsStream(); 
      t2.Seek(0); 
      BitmapImage bitmapImage = new BitmapImage(); 
      bitmapImage.SetSource(t2); 
      Image image = new Image(); 
      image.Source = bitmapImage;< 
+1

Na czym polega problem? Czy ten błąd? – DonBoitnott

+0

bez błędu. ale nie wiem, jak mogę go zapisać do pliku. – Taladan

+0

Masz obiekt 'Obraz' ... tak:' image.Save ("C: \\ myDir \\ myFile.png", System.Drawing.Imaging.ImageFormat.Png); ' – DonBoitnott

Odpowiedz

0

Tak proste, jak to tylko dodaje ostatni wiersz do istniejącego kodu (np PNG)

var dataPackage = Clipboard.GetContent(); 
      var t = await dataPackage.GetBitmapAsync(); 
      var t2 = await t.OpenReadAsync(); 
      t2.AsStream(); 
      t2.Seek(0); 
      BitmapImage bitmapImage = new BitmapImage(); 
      bitmapImage.SetSource(t2); 
      Image image = new Image(); 
      image.Source = bitmapImage; 
      image.Save("ImagePathToStore.png", System.Drawing.Imaging.ImageFormat.PNG); 

Link for Supported imageformates

+0

Image.save nie jest dostępny w Windows.ui.controls.image w Windows RT. – Taladan

+0

'image.Save' nie jest częścią API WinRT. – Xyroid

4

Proszę bardzo :)

Uwaga cię nie można użyć DOWOLNEGO folderu do zapisania. Zdałem ApplicationData.Current.LocalFolder.Path jako desination. Możesz użyć FolderPicker, a następnie przekazać ścieżkę wybranego folderu.

private async Task StoreImageFromClipboardAsync() 
{ 
    var dataPackage = Clipboard.GetContent(); 
    var formats = dataPackage.AvailableFormats; 
    if (formats.Contains("Bitmap")) 
    { 
     var t = await dataPackage.GetBitmapAsync(); 
     var file = await ChangeIRASRToStorageFileAsync(t, ApplicationData.Current.LocalFolder.Path, "Clipboard.png"); 
    } 
} 

private async Task<StorageFile> ChangeIRASRToStorageFileAsync(IRandomAccessStreamReference MyIRASR, String StorageFolderPath, String StorageFileName) 
{ 
    IRandomAccessStreamWithContentType MyIRASWCT = await MyIRASR.OpenReadAsync(); 
    StorageFolder MyStorageFolder = await StorageFolder.GetFolderFromPathAsync(StorageFolderPath); 
    StorageFile MyStorageFile = await MyStorageFolder.CreateFileAsync(StorageFileName, CreationCollisionOption.ReplaceExisting); 
    Windows.Storage.Streams.Buffer MyBuffer = new Windows.Storage.Streams.Buffer(Convert.ToUInt32(MyIRASWCT.Size)); 
    IBuffer iBuf = await MyIRASWCT.ReadAsync(MyBuffer, MyBuffer.Capacity, InputStreamOptions.None); 
    await FileIO.WriteBufferAsync(MyStorageFile, iBuf); 
    return MyStorageFile; 
} 
0

Ostatni post przykład zapisuje obraz BMP zamiast obrazu PNG. Poniższe rozwiązanie działa dla mnie, jeśli chcę zapisać pliki PNG ze schowka:

private async Task StoreImageFromClipboardAsync() 
{ 
    var dataPackage = Clipboard.GetContent(); 
    if (datapackage.Contains(StandardDataFormats.Bitmap)) 
    { 
    var t = await dataPackage.GetBitmapAsync(); 
    var file = await SaveToPngTaskFile(t, ApplicationData.Current.LocalFolder, 
     "Clipboard.png"); 
    } 
} 

public static async Task<StorageFile> SaveToPngTaskFile 
    (IRandomAccessStreamReference rndAccessStreamReference, 
    StorageFolder storageFolder, String storageFileName) 
{ 
    IRandomAccessStreamWithContentType rndAccessStreamWithContentType = 
    await rndAccessStreamReference.OpenReadAsync(); 
    StorageFile storageFile = 
    await storageFolder.CreateFileAsync(storageFileName, 
     CreationCollisionOption.GenerateUniqueName); 
    var decoder = await BitmapDecoder.CreateAsync(rndAccessStreamWithContentType); 
    var pixels = await decoder.GetPixelDataAsync(); 
    var outStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite); 
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, outStream); 
    encoder.SetPixelData(decoder.BitmapPixelFormat, BitmapAlphaMode.Ignore, 
    decoder.OrientedPixelWidth, decoder.OrientedPixelHeight, 
    decoder.DpiX, decoder.DpiY, 
    pixels.DetachPixelData()); 
    await encoder.FlushAsync(); 
    outStream.Dispose(); 
    return storageFile; 
} 
Powiązane problemy