2013-01-16 2 views
1

writeablebitmap을 공유하고 싶지만 공유 대상 앱을 열면 이미지가 없습니다. 아래는 제 코드입니다.공유 writeablebitmap 항상 실패했습니다

private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e) 
    { 
     DataPackage requestData = e.Request.Data; 
     requestData.Properties.Title = "Image"; 

     Guid encoderId; 
     switch (file.FileType) 
     { 
      case ".png": 
       encoderId = BitmapEncoder.PngEncoderId; 
       break; 
      case ".jpg": 
      case ".jpeg": 
      default: 
       encoderId = BitmapEncoder.JpegEncoderId; 
       break; 
     } 

     DataRequestDeferral deferral = e.Request.GetDeferral(); 
     try 
     { 
      using (IRandomAccessStream stream = new InMemoryRandomAccessStream()) 
      { 
       BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, stream); 
       // image is the WriteableBitmap 
       Stream pixelStream = image.PixelBuffer.AsStream(); 
       byte[] pixels = new byte[pixelStream.Length]; 
       await pixelStream.ReadAsync(pixels, 0, pixels.Length); 
       encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)image.PixelWidth, (uint)image.PixelHeight, 96.0, 96.0, pixels); 
       await encoder.FlushAsync(); 
       RandomAccessStreamReference rasr = RandomAccessStreamReference.CreateFromStream(stream); 
       requestData.Properties.Thumbnail = rasr; 
       requestData.SetBitmap(rasr);      
      } 
     } 
     catch (Exception ex) 
     { 
      NotifyUser(ex.ToString()); 
     } 
     finally 
     { 
      deferral.Complete(); 
     } 
    } 

답변

2

이 시도하십시오

private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e) 
     { 
     DataRequestDeferral deferral = e.Request.GetDeferral(); 

     DataPackage requestData = e.Request.Data; 
     requestData.Properties.Title = "Image"; 
     IRandomAccessStream stream = new InMemoryRandomAccessStream(); 
     Guid encoderId; 
     switch (file.FileType) 
     { 
      case ".png": 
       encoderId = BitmapEncoder.PngEncoderId; 
       break; 
      case ".jpg": 
      case ".jpeg": 
      default: 
       encoderId = BitmapEncoder.JpegEncoderId; 
       break; 
     } 
     BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, stream); 
     Stream pixelStream = image.PixelBuffer.AsStream(); 
     byte[] pixels = new byte[pixelStream.Length]; 
     await pixelStream.ReadAsync(pixels, 0, pixels.Length); 
     encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)image.PixelWidth, (uint)image.PixelHeight, 96.0, 96.0, pixels); 
     requestData.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream)); 
     await encoder.FlushAsync(); 

     deferral.Complete(); 
    } 
관련 문제