0

私は現在、編集された画像の共有チャームを利用したい Windows ストア用の小さな画像編集アプリを書いています。一部のアプリは StorageFiles のみを受け入れ、ビットマップは受け入れないため (デフォルトのメール アプリなど)、ここで説明されているように、両方の方法で画像を提供したいと思います: http://www.jeffblankenburg.com/2012/11/07/31- days-of-windows-8-day-7-share-contract ただし、WrieableBitmap から StorageFile を作成する方法がわかりません。

以下のコードを完成させるのを手伝ってくれるかもしれません。

// Share Image
async void dtm_DataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
    DataRequestDeferral deferral = e.Request.GetDeferral();

    DataPackage requestData = e.Request.Data;
    requestData.Properties.Title = "My Image";
    requestData.Properties.Description = "Created using a Windows Store App.";


    // This stream is to create a bitmap image later
    IRandomAccessStream stream = new InMemoryRandomAccessStream();

    // Determin which type of BitmapEncoder we should create
    Guid encoderId = BitmapEncoder.JpegEncoderId;

    BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, stream);
    Stream pixelStream = theImage.PixelBuffer.AsStream();
    byte[] pixels = new byte[pixelStream.Length];
    await pixelStream.ReadAsync(pixels, 0, pixels.Length);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)theImage.PixelWidth, (uint)theImage.PixelHeight, 96.0, 96.0, pixels);

    requestData.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream));



    // What goes here?
    StorageFile storageFileImage = 



    List<IStorageItem> files = new List<IStorageItem>();
    files.Add(storageFileImage);
    requestData.SetStorageItems(files);


    requestData.Properties.Thumbnail = RandomAccessStreamReference.CreateFromStream(stream);
    await encoder.FlushAsync();


    deferral.Complete();
}
4

1 に答える 1

1

以下は、WriteableBitmap wb を Pictures ライブラリにある StorageFile にエンコードする方法を示しています。

private static async Task<StorageFile> SaveAsJpeg(WriteableBitmap wb)
{
     byte[] pixels;
     using (var stream = wb.PixelBuffer.AsStream())
     {
        pixels = new byte[(uint)stream.Length];
        await stream.ReadAsync(pixels, 0, pixels.Length);
     }
     var name = String.Format("{0}_{1:yyyy-MM-dd_HH-mm-ss}.jpg", "MyApp", DateTime.Now);
     var outputFile = await KnownFolders.PicturesLibrary.CreateFileAsync(name, CreationCollisionOption.ReplaceExisting);
     using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
     {
        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, writeStream);
        encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied,
                             (uint)wb.PixelWidth, (uint)wb.PixelHeight,
                             96, 96, pixels);
        await encoder.FlushAsync();

        using (var outputStream = writeStream.GetOutputStreamAt(0))
        {
           await outputStream.FlushAsync();
        }
     }
     return outputFile;
}
于 2013-06-26T13:08:19.997 に答える