wb.Flip을 사용할 때 이미지가 완전히로드되지 않았을 것으로 생각됩니다. IIRC wb.SetSource는 비동기 적으로 실행됩니다.
FromContent라는 WriteableBitmapEx 라이브러리에서 사용할 수있는 다른 방법이 있습니다. 이를 통해 앱의 콘텐츠에서 이미지를로드 할 수 있으며 메소드는 백그라운드에서 모든 것을 처리합니다.
아래 스 니펫은 logo.png를로드하고 뒤집은 다음 이미지 컨트롤에 WriteableBitmap을 할당합니다. 당신이 스트림이 WriteableBitmap로 변환하는 방법을 보게 될 WriteableBitmapEx.FromContent 방법의 WinRT 버전의 소스 코드에 보면
var wb = await BitmapFactory.New(1, 1).FromContent(new Uri(BaseUri, @"///assets/logo.png"));
wb = wb.Flip(WriteableBitmapExtensions.FlipMode.Vertical);
Viewport.Source = wb;
. WriteableBitmap로 모든 이미지 포맷 IRandomAccessStream를 디코딩하기 위해 아래의 조각을 사용하여
이
// Decode image format
var decoder = await BitmapDecoder.CreateAsync(fileStream);
var transform = new BitmapTransform();
var pixelData = await decoder.GetPixelDataAsync(decoder.BitmapPixelFormat, decoder.BitmapAlphaMode, transform, ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb);
// Swap R and B channels since it's reversed
var pixels = pixelData.DetachPixelData();
for (var i = 0; i < pixels.Length; i += 4)
{
var r = pixels[i];
var b = pixels[i + 2];
pixels[i] = b;
pixels[i + 2] = r;
}
// Copy pixels to WriteableBitmap
var wb = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
using (var bmpStream = wb.PixelBuffer.AsStream())
{
bmpStream.Seek(0, SeekOrigin.Begin);
bmpStream.Write(pixels, 0, (int)bmpStream.Length);
}
// Your original code
var newWB = wb.Flip(FlipMode.Vertical);
ImageControl.Source = newWB;
네, 하나는 ESP를 제외한 것보다 훨씬 더 많은 코드입니다. 이전에 Silverlight 또는 WPF에서이 작업을 수행 한 경우
어디에서 WinRT 버전의 라이브러리를 가져 왔습니까? 그녀의 –
: http : //writeablebitmapex.codeplex.com/releases/view/39577 –
나는 이것을 내일 볼 것이다. - 르네 Schulte (lib의 저자). BTW, WBX 질문에 대한 StackOverflow는 모니터링하지 않으며 CodePlex 사이트의 토론 만 모니터링합니다. –