이미지에 필터 효과를 적용하는 앱을 만들려고합니다. FilePicker에서 IRandomAccessStream을 얻을 수 있으며이를 BitmapDecoder로 변환 할 수 있습니다. 그러나 비트 맵 데이터를 이미지로 표현하는 방법을 모르겠습니다. 파일 이름이나 경로를 사용하고 싶지 않고 BitmapData를 이미지로 표시하려고합니다. WinJS에서 어떤 컨트롤을 사용해야하며 어떻게해야합니까?WinJS에서 Windows.Graphics.Imaging.BitmapDecoder를 표시하는 방법은 무엇입니까?
0
A
답변
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="#" />
Kiewic, 나는 당신의 대답을 주셔서 감사합니다. 하지만 실제로 직면하고있는 문제는 BitmapDecoder 객체에서 IRandomAccessStream을 추출해야한다는 것입니다. 내가 제공하는 몇 가지 방법을 시도했지만 그렇게 할 수 없습니다. – Anz