수색…
매개 변수
매개 변수 | 기술 |
---|---|
DecodePixelWidth | BitmapImage를 지정된 너비로로드합니다. 화면에 작게 표시 할 큰 이미지를로드 할 때 메모리 사용 및 속도를 향상시킵니다. 이것은 전체 이미지를로드하는 것보다 효율적이며 Image 컨트롤을 사용하여 크기 조정을 수행합니다. |
DecodePixelHeight | DecodePixelHeight 와 동일합니다. 매개 변수 하나만 지정하면 시스템은 필요한 크기로로드하는 동안 이미지의 종횡비를 유지합니다. |
이미지 컨트롤과 함께 BitmapImage 사용
<Image x:Name="MyImage" />
// Show image from web
MyImage.Source = new BitmapImage(new Uri("http://your-image-url.com"))
// Show image from solution
MyImage.Source = new Uri("ms-appx:///your-image-in-solution", UriKind.Absolute)
// Show image from file
IRandomAccessStreamReference file = GetFile();
IRandomAccessStream fileStream = await file.OpenAsync();
var image = new BitmapImage();
await image.SetSourceAsync(fileStream);
MyImage.Source = image;
fileStream.Dispose(); // Don't forget to close the stream
RenderTargetBitmap을 사용하여 이미지를 렌더링하는 컨트롤 렌더링
<TextBlock x:Name="MyControl"
Text="Hello, world!" />
var rtb = new RenderTargetBitmap();
await rtb.RenderAsync(MyControl); // Render control to RenderTargetBitmap
// Get pixels from RTB
IBuffer pixelBuffer = await rtb.GetPixelsAsync();
byte[] pixels = pixelBuffer.ToArray();
// Support custom DPI
DisplayInformation displayInformation = DisplayInformation.GetForCurrentView();
var stream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, // RGB with alpha
BitmapAlphaMode.Premultiplied,
(uint)rtb.PixelWidth,
(uint)rtb.PixelHeight,
displayInformation.RawDpiX,
displayInformation.RawDpiY,
pixels);
await encoder.FlushAsync(); // Write data to the stream
stream.Seek(0); // Set cursor to the beginning
// Use stream (e.g. save to file)
비트 맵을 클립 보드 콘텐츠에서 PNG로 변환
IRandomAccessStreamReference bitmap = GetBitmap();
IRandomAccessStreamWithContentType stream = await bitmap.OpenReadAsync();
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
var pixels = await decoder.GetPixelDataAsync();
var outStream = new InMemoryRandomAccessStream();
// Create encoder for PNG
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, outStream);
// Get pixel data from decoder and set them for encoder
encoder.SetPixelData(decoder.BitmapPixelFormat,
BitmapAlphaMode.Ignore, // Alpha is not used
decoder.OrientedPixelWidth,
decoder.OrientedPixelHeight,
decoder.DpiX, decoder.DpiY,
pixels.DetachPixelData());
await encoder.FlushAsync(); // Write data to the stream
// Here you can use your stream
XAML에서 이미지로드
<Image Source="ms-appx:///Assets/Windows_10_Hero.png"/>
이미지는 애셋 폴더에있는 애플리케이션의 일부이며 Content
로 표시됩니다.
<Image Source="ms-appdata:///local/Windows_10_Hero.png"/>
이미지가 응용 프로그램의 로컬 폴더에 저장되었습니다.
<Image Source="ms-appdata:///roaming/Windows_10_Hero.png"/>
이미지가 애플리케이션의 로밍 폴더에 저장되었습니다.
코드의 에셋에서 이미지로드
ImageSource result = new BitmapImage(new Uri("ms-appx:///Assets/Windows_10_Hero.png"));
결과를 사용하여 Binding
또는 코드 숨김을 통해 Image
컨트롤의 Source
속성을 설정합니다.
StorageFile에서 이미지로드
public static async Task<ImageSource> FromStorageFile(StorageFile sf)
{
using (var randomAccessStream = await sf.OpenAsync(FileAccessMode.Read))
{
var result = new BitmapImage();
await result.SetSourceAsync(randomAccessStream);
return result;
}
}
결과를 사용하여 Binding
또는 코드 숨김을 통해 Image
컨트롤의 Source
속성을 설정합니다.
응용 프로그램과 함께 제공되지 않고 사용자의 디스크에 저장된 이미지를 열어야 할 때 유용합니다.
UI 요소를 이미지에 렌더링하기
public static async Task<WriteableBitmap> RenderUIElement(UIElement element)
{
var bitmap = new RenderTargetBitmap();
await bitmap.RenderAsync(element);
var pixelBuffer = await bitmap.GetPixelsAsync();
var pixels = pixelBuffer.ToArray();
var writeableBitmap = new WriteableBitmap(bitmap.PixelWidth, bitmap.PixelHeight);
using (Stream stream = writeableBitmap.PixelBuffer.AsStream())
{
await stream.WriteAsync(pixels, 0, pixels.Length);
}
return writeableBitmap;
}
WriteableBitmap
은 ImageSource
이므로 Binding 또는 코드 숨김을 통해 Image 컨트롤의 Source 속성을 설정하는 데 사용할 수 있습니다
WriteableBitmap을 스트림에 저장
public static async Task<IRandomAccessStream> ConvertWriteableBitmapToRandomAccessStream(WriteableBitmap writeableBitmap)
{
var stream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
Stream pixelStream = writeableBitmap.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)writeableBitmap.PixelWidth, (uint)writeableBitmap.PixelHeight, 96.0, 96.0, pixels);
await encoder.FlushAsync();
return stream;
}
스트림을 사용하여 비트 맵을 파일에 저장합니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow