Saving image form Clipboard

做~自己de王妃 提交于 2019-12-10 14:38:40

问题


i want to save one Image inside clipboard in winrt to file. but i found no way. can you help please?

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:


Here you go :)

Please note you can't use ANY folder to save. I have passed ApplicationData.Current.LocalFolder.Path as desination. You can use FolderPicker and then pass the path of picked folder.

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



回答2:


As simple as that, just added the last line to your existing code (e.g. for 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




回答3:


Last post example saves an BMP image instead of a PNG image. The following solution works for me if I want to save PNG files from Clipboard:

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


来源:https://stackoverflow.com/questions/16965776/saving-image-form-clipboard

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!