Sök…
parametrar
Parameter | Beskrivning |
---|---|
DecodePixelWidth | Laddar BitmapImage med den angivna bredden. Hjälper med minnesanvändning och hastighet när du laddar stora bilder som är tänkta att visas mindre på skärmen. Detta är mer effektivt än att ladda hela bilden och lita på Image för att ändra storleken. |
DecodePixelHeight | Samma som DecodePixelHeight . Om bara en parameter anges kommer systemet att bibehålla bildens bildförhållande medan den laddas i önskad storlek. |
Använda BitmapImage med bildkontroll
<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 av kontroller till bild med 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)
Konvertera Bitmap (t.ex. från Urklippsinnehåll) till 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
Ladda bilden i XAML
<Image Source="ms-appx:///Assets/Windows_10_Hero.png"/>
Din bild är en del av applikationen i mappen Tillgångar och markerad som Content
<Image Source="ms-appdata:///local/Windows_10_Hero.png"/>
Din bild sparades i din applikations lokala mapp
<Image Source="ms-appdata:///roaming/Windows_10_Hero.png"/>
Din bild sparades i din applikations Roamingmapp
Ladda bild från tillgångar i kod
ImageSource result = new BitmapImage(new Uri("ms-appx:///Assets/Windows_10_Hero.png"));
Använd resultatet för att ställa in Source
för en Image
antingen genom Binding
eller kod bakom
Ladda bild från 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;
}
}
Använd resultatet för att ställa in Source
för en Image
antingen genom Binding
eller kod bakom
Användbart när du behöver öppna bilder som är lagrade på användarens disk och inte skickas med din applikation
Återge ett UI-element till en 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;
}
Eftersom WriteableBitmap
är en ImageSource
du använda den för att ställa in Source-egenskapen för en bildkontroll antingen genom en bindning eller kod bakom
Spara en WriteableBitmap i en ström
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;
}
Använd strömmen för att spara bitmappen i en fil.
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow