Suche…
Parameter
Parameter | Beschreibung |
---|---|
DecodePixelWidth | Lädt das BitmapImage mit der angegebenen Breite. Hilft beim Speichern und beim Speichern großer Bilder, die auf dem Bildschirm kleiner dargestellt werden sollen. Dies ist effizienter als das Laden eines vollständigen Bildes und die Steuerung der Image für die Größenänderung. |
DecodePixelHeight | Gleich wie DecodePixelHeight . Wenn nur ein Parameter angegeben wird, behält das System das Seitenverhältnis des Bildes beim Laden in der erforderlichen Größe bei. |
Verwenden von BitmapImage mit Bildsteuerung
<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
Rendering-Steuerelemente für ein Bild mit 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)
Konvertieren Sie Bitmap (zB aus dem Inhalt der Zwischenablage) nach 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
Bild in XAML laden
<Image Source="ms-appx:///Assets/Windows_10_Hero.png"/>
Ihr Bild ist Teil der Anwendung, im Ordner Assets und als Content
markiert
<Image Source="ms-appdata:///local/Windows_10_Hero.png"/>
Ihr Bild wurde im lokalen Ordner Ihrer Anwendung gespeichert
<Image Source="ms-appdata:///roaming/Windows_10_Hero.png"/>
Ihr Bild wurde im Roaming-Ordner Ihrer Anwendung gespeichert
Bild aus Assets in Code laden
ImageSource result = new BitmapImage(new Uri("ms-appx:///Assets/Windows_10_Hero.png"));
Verwenden Sie result, um die Source
Eigenschaft eines Image
Steuerelements entweder durch eine Binding
oder durch einen Code- Binding
festzulegen
Bild aus StorageFile laden
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;
}
}
Verwenden Sie result, um die Source
Eigenschaft eines Image
Steuerelements entweder durch eine Binding
oder durch einen Code- Binding
festzulegen
Nützlich, wenn Sie Images öffnen müssen, die auf der Festplatte des Benutzers gespeichert sind und nicht im Lieferumfang Ihrer Anwendung enthalten sind
Rendern eines Benutzeroberflächenelements in ein Bild
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;
}
Da WriteableBitmap
eine ImageSource
, können Sie es verwenden, um die Source-Eigenschaft eines Image-Steuerelements entweder über eine Bindung oder einen Code- ImageSource
Speichern Sie eine WriteableBitmap in einem Stream
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;
}
Verwenden Sie den Stream, um die Bitmap in einer Datei zu speichern.