0

에 저장하면 이미지를 저장할 수 있습니까? 이미지는 파일이 아닌 BitmapImage 형식으로 만 찾을 수 있습니다.WriteableBitmap 또는 BitmapImage를 C++ Windows Storage App

나는 C++에서이 방법을 알고있다. 당신이 첫번째 장소에있는 BitmapImage을로드하는 경우 - -

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; 

가 더 문제가 무효가 될 수없는 작업이 될 필요가 없습니다 ...

답변

0

음, 우선입니다 당신은 소스 파일에 액세스 할 수 그래서 가장 쉬운 해결책은 소스 파일을 복사하는 것입니다. WriteableBitmap의 경우 C# 버전과 조금 비슷하지만 COM과 유사한 기술로 작업하기 시작할 때 약간 더 복잡합니다. 픽셀에 대한 액세스보기에 대한 내 질문에 제임스의 대답은 당신에게 조금 도움이된다면보기 :

How to get access to WriteableBitmap.PixelBuffer pixels with C++?

+0

그것은 정말 복잡하고 나는 소스 파일 스트림을 사용하지 못할 것을 나는 당신을 알 수 있습니다. – Stamos

+0

음, 원본 스트림을 사용하는 것이 가장 좋은 방법입니다. 이미지를 다시 인코딩하는 것은 성능이 좋지 않습니다. 이미지가 제거되었을 수도있는 SD 카드에있는 경우 등 절대적으로 그렇게 할 수없는 경우 - 링크 된 답변에서 'WriteableBitmaps' 및 픽셀 버퍼 액세스 방법을 사용하십시오. –

+0

임 Ibuffer 파일에 그 아이디어를 저장하는 방법을 이해하려고? – Stamos