2012-11-16 1 views
0

이미지에 필터 효과를 적용하는 앱을 만들려고합니다. FilePicker에서 IRandomAccessStream을 얻을 수 있으며이를 BitmapDecoder로 변환 할 수 있습니다. 그러나 비트 맵 데이터를 이미지로 표현하는 방법을 모르겠습니다. 파일 이름이나 경로를 사용하고 싶지 않고 BitmapData를 이미지로 표시하려고합니다. WinJS에서 어떤 컨트롤을 사용해야하며 어떻게해야합니까?WinJS에서 Windows.Graphics.Imaging.BitmapDecoder를 표시하는 방법은 무엇입니까?

답변

0

이 MSDN 블로그 더 자세히 다음과 같은 과정을 설명 http://goo.gl/izCdf http://goo.gl/OLgfn

BitmapDecoder에서 BitmapEncoder를 만드는 방법을 찾았습니다. 이 인코더를 사용하여 필드에 표시 할 수있는 메모리 스트림을 만들 수 있습니다.

 internal async Task<InMemoryRandomAccessStream> applyFilterInternal() 
    { 
     inputStream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite); 
     decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(inputStream); 

     var memStream = new Windows.Storage.Streams.InMemoryRandomAccessStream(); 
     var encoder = await Windows.Graphics.Imaging.BitmapEncoder.CreateForTranscodingAsync(memStream, decoder); 

     encoder.BitmapTransform.ScaledWidth = 640; 
     encoder.BitmapTransform.ScaledHeight = 480; 
     encoder.BitmapTransform.Rotation = Windows.Graphics.Imaging.BitmapRotation.Clockwise90Degrees; 

     // Fant is a relatively high quality interpolation algorithm. 
     encoder.BitmapTransform.InterpolationMode = Windows.Graphics.Imaging.BitmapInterpolationMode.Fant; 

     // Attempt to generate a new thumbnail from the updated pixel data. 
     // Note: Only JPEG, TIFF and JPEG-XR images support encoding thumbnails. 
     encoder.IsThumbnailGenerated = true; 

     await encoder.FlushAsync(); 
     return memStream; 
    } 

public IAsyncOperation<InMemoryRandomAccessStream> applyFilter() 
    { 
     Task<InMemoryRandomAccessStream> from = applyFilterInternal(); 
     IAsyncOperation<InMemoryRandomAccessStream> to = from.AsAsyncOperation(); 
     return to; 
    } 

이를 표시하려면 -

  filter.applyFilter().then(function (memStream) { 
      var msStream = MSApp.createStreamFromInputStream("image/jpeg", memStream); 
      var imageURL = URL.createObjectURL(msStream); 
      id("imageInput").src = imageURL; 

     }); 
0

MSApp.createStreamFromInputStream()URL.createObjectURL()와 이미지에 IInputStream 또는 IRandomAccessStream 변환 :

var path = Windows.Storage.ApplicationData.current.localFolder.path + "\\thing.jpg"; 
Windows.Storage.StorageFile.getFileFromPathAsync(path).then(function (file) { 
    file.openAsync(Windows.Storage.FileAccessMode.read).then(function (randomStream) { 

     // Convert the stream to MS-Stream. 
     var msStream = MSApp.createStreamFromInputStream("image/jpeg", randomStream); 
     var imageUrl = URL.createObjectURL(msStream); 

     var img = document.getElementById("theImage"); 
     img.src = imageUrl; 

    }, onError); 
}, onError); 

을 HTML은 다음과 같아야합니다

<img id="theImage" src="#" /> 
+0

Kiewic, 나는 당신의 대답을 주셔서 감사합니다. 하지만 실제로 직면하고있는 문제는 BitmapDecoder 객체에서 IRandomAccessStream을 추출해야한다는 것입니다. 내가 제공하는 몇 가지 방법을 시도했지만 그렇게 할 수 없습니다. – Anz