WriteableBitmap Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller en BitmapSource som kan skrivas till och uppdateras.
public ref class WriteableBitmap sealed : System::Windows::Media::Imaging::BitmapSource
public sealed class WriteableBitmap : System.Windows.Media.Imaging.BitmapSource
type WriteableBitmap = class
inherit BitmapSource
Public NotInheritable Class WriteableBitmap
Inherits BitmapSource
- Arv
-
WriteableBitmap
Exempel
I följande exempel visas hur en WriteableBitmap kan användas som källa för en Image för att rita pixlar när musen flyttas.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Input;
namespace WriteableBitmapDemo
{
class Program
{
static WriteableBitmap writeableBitmap;
static Window w;
static Image i;
[STAThread]
static void Main(string[] args)
{
i = new Image();
RenderOptions.SetBitmapScalingMode(i, BitmapScalingMode.NearestNeighbor);
RenderOptions.SetEdgeMode(i, EdgeMode.Aliased);
w = new Window();
w.Content = i;
w.Show();
writeableBitmap = new WriteableBitmap(
(int)w.ActualWidth,
(int)w.ActualHeight,
96,
96,
PixelFormats.Bgr32,
null);
i.Source = writeableBitmap;
i.Stretch = Stretch.None;
i.HorizontalAlignment = HorizontalAlignment.Left;
i.VerticalAlignment = VerticalAlignment.Top;
i.MouseMove += new MouseEventHandler(i_MouseMove);
i.MouseLeftButtonDown +=
new MouseButtonEventHandler(i_MouseLeftButtonDown);
i.MouseRightButtonDown +=
new MouseButtonEventHandler(i_MouseRightButtonDown);
w.MouseWheel += new MouseWheelEventHandler(w_MouseWheel);
Application app = new Application();
app.Run();
}
// The DrawPixel method updates the WriteableBitmap by using
// unsafe code to write a pixel into the back buffer.
static void DrawPixel(MouseEventArgs e)
{
int column = (int)e.GetPosition(i).X;
int row = (int)e.GetPosition(i).Y;
try{
// Reserve the back buffer for updates.
writeableBitmap.Lock();
unsafe
{
// Get a pointer to the back buffer.
IntPtr pBackBuffer = writeableBitmap.BackBuffer;
// Find the address of the pixel to draw.
pBackBuffer += row * writeableBitmap.BackBufferStride;
pBackBuffer += column * 4;
// Compute the pixel's color.
int color_data = 255 << 16; // R
color_data |= 128 << 8; // G
color_data |= 255 << 0; // B
// Assign the color data to the pixel.
*((int*) pBackBuffer) = color_data;
}
// Specify the area of the bitmap that changed.
writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
}
finally{
// Release the back buffer and make it available for display.
writeableBitmap.Unlock();
}
}
static void ErasePixel(MouseEventArgs e)
{
byte[] ColorData = { 0, 0, 0, 0 }; // B G R
Int32Rect rect = new Int32Rect(
(int)(e.GetPosition(i).X),
(int)(e.GetPosition(i).Y),
1,
1);
writeableBitmap.WritePixels( rect, ColorData, 4, 0);
}
static void i_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
ErasePixel(e);
}
static void i_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DrawPixel(e);
}
static void i_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DrawPixel(e);
}
else if (e.RightButton == MouseButtonState.Pressed)
{
ErasePixel(e);
}
}
static void w_MouseWheel(object sender, MouseWheelEventArgs e)
{
System.Windows.Media.Matrix m = i.RenderTransform.Value;
if (e.Delta > 0)
{
m.ScaleAt(
1.5,
1.5,
e.GetPosition(w).X,
e.GetPosition(w).Y);
}
else
{
m.ScaleAt(
1.0 / 1.5,
1.0 / 1.5,
e.GetPosition(w).X,
e.GetPosition(w).Y);
}
i.RenderTransform = new MatrixTransform(m);
}
}
}
Kommentarer
WriteableBitmap Använd klassen för att uppdatera och återge en bitmapp per bildruta. Detta är användbart för att generera algoritmiskt innehåll, till exempel en fraktal bild, och för datavisualisering, till exempel en musikvisualiserare.
Klassen WriteableBitmap använder två buffertar. Serverbufferten allokeras i systemminnet och ackumulerar innehåll som för närvarande inte visas. Den främre bufferten allokeras i systemminnet och innehåller det innehåll som visas för närvarande. Renderingssystemet kopierar den främre bufferten till videominnet för visning.
Två trådar använder dessa buffertar. Användargränssnittstråden (UI) genererar användargränssnittet men visar det inte på skärmen. Användargränssnittstråden svarar på användarindata, timers och andra händelser. Ett program kan ha flera gränssnittstrådar. Återgivningstråden skriver och återger ändringar från användargränssnittstråden. Det finns bara en återgivningstråd per program.
Användargränssnittstråden skriver innehåll till serverbufferten. Återgivningstråden läser innehåll från den främre bufferten och kopierar det till videominnet. Ändringar i den bakre bufferten spåras med ändrade rektangulära regioner.
Anropa en av överlagringarna WritePixels för att uppdatera och visa innehåll i den bakre bufferten automatiskt.
Om du vill ha större kontroll över uppdateringar och för åtkomst med flera trådar till serverbufferten använder du följande arbetsflöde.
Lock Anropa metoden för att reservera serverbufferten för uppdateringar.
Hämta en pekare till den bakre bufferten BackBuffer genom att komma åt egenskapen.
Skriv ändringar i serverbufferten. Andra trådar kan skriva ändringar i den bakre bufferten när den WriteableBitmap är låst.
AddDirtyRect Anropa metoden för att ange områden som har ändrats.
Unlock Anropa metoden för att frigöra backbufferten och tillåta presentation på skärmen.
När uppdateringar skickas till återgivningstråden kopierar återgivningstråden de ändrade rektanglarna från den bakre bufferten till den främre bufferten. Renderingssystemet styr det här utbytet för att undvika dödlägen och rita om artefakter, till exempel "riva".
Konstruktorer
| Name | Description |
|---|---|
| WriteableBitmap(BitmapSource) |
Initierar en ny instans av klassen med hjälp av WriteableBitmap den angivna BitmapSource. |
| WriteableBitmap(Int32, Int32, Double, Double, PixelFormat, BitmapPalette) |
Initierar en ny instans av WriteableBitmap klassen med de angivna parametrarna. |
Egenskaper
| Name | Description |
|---|---|
| BackBuffer |
Hämtar en pekare till den bakre bufferten. |
| BackBufferStride |
Hämtar ett värde som anger antalet byte i en enda rad med pixeldata. |
| CanFreeze |
Hämtar ett värde som anger om objektet kan göras ommodifierbart. (Ärvd från Freezable) |
| DependencyObjectType |
DependencyObjectType Hämtar som omsluter CLR-typen för den här instansen. (Ärvd från DependencyObject) |
| Dispatcher |
Hämtar det Dispatcher som DispatcherObject är associerat med. (Ärvd från DispatcherObject) |
| DpiX |
Hämtar bildens vågräta punkter per tum (dpi). (Ärvd från BitmapSource) |
| DpiY |
Hämtar bildens lodräta punkter per tum (dpi). (Ärvd från BitmapSource) |
| Format |
Hämtar inbyggda PixelFormat bitmappsdata. (Ärvd från BitmapSource) |
| HasAnimatedProperties |
Hämtar ett värde som anger om ett eller flera AnimationClock objekt är associerade med något av det här objektets beroendeegenskaper. (Ärvd från Animatable) |
| Height |
Hämtar höjden på källbitmappen i enhetsoberoende enheter (1/96 tum per enhet). (Ärvd från BitmapSource) |
| IsDownloading |
Hämtar ett värde som anger om innehållet BitmapSource för närvarande laddas ned. (Ärvd från BitmapSource) |
| IsFrozen |
Hämtar ett värde som anger om objektet för närvarande kan ändras. (Ärvd från Freezable) |
| IsSealed |
Hämtar ett värde som anger om den här instansen för närvarande är förseglad (skrivskyddad). (Ärvd från DependencyObject) |
| Metadata |
Hämtar metadata som är associerade med den här bitmappsbilden. (Ärvd från BitmapSource) |
| Palette |
Hämtar bitmappens färgpalett, om en anges. (Ärvd från BitmapSource) |
| PixelHeight |
Hämtar bitmappens höjd i bildpunkter. (Ärvd från BitmapSource) |
| PixelWidth |
Hämtar bitmappens bredd i bildpunkter. (Ärvd från BitmapSource) |
| Width |
Hämtar bitmappens bredd i enhetsoberoende enheter (1/96 tum per enhet). (Ärvd från BitmapSource) |
Metoder
| Name | Description |
|---|---|
| AddDirtyRect(Int32Rect) |
Anger området för bitmappen som ändrades. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Tillämpar en AnimationClock på den angivna DependencyProperty. Om egenskapen redan är animerad används den angivna HandoffBehavior . (Ärvd från Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Tillämpar en AnimationClock på den angivna DependencyProperty. Om egenskapen redan är animerad används överlämningsbeteendet SnapshotAndReplace . (Ärvd från Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Tillämpar en animering på den angivna DependencyProperty. Animeringen startas när nästa bildruta återges. Om den angivna egenskapen redan är animerad används den angivna HandoffBehavior egenskapen. (Ärvd från Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Tillämpar en animering på den angivna DependencyProperty. Animeringen startas när nästa bildruta återges. Om den angivna egenskapen redan är animerad används överlämningsbeteendet SnapshotAndReplace . (Ärvd från Animatable) |
| CheckAccess() |
Avgör om den anropande tråden har åtkomst till den här DispatcherObject. (Ärvd från DispatcherObject) |
| CheckIfSiteOfOrigin() |
Kontrollerar om bitmappens källinnehåll kommer från en känd ursprungsplats. Den här metoden används för att se till att pixelkopieringsåtgärder är säkra. (Ärvd från BitmapSource) |
| ClearValue(DependencyProperty) |
Rensar det lokala värdet för en egenskap. Egenskapen som ska rensas anges av en DependencyProperty identifierare. (Ärvd från DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Rensar det lokala värdet för en skrivskyddad egenskap. Egenskapen som ska rensas anges av en DependencyPropertyKey. (Ärvd från DependencyObject) |
| Clone() |
Skapar en modifierbar klon av detta WriteableBitmapoch gör djupa kopior av objektets värden. När du kopierar beroendeegenskaper kopierar den här metoden resursreferenser och databindningar (men de kanske inte längre matchar) men inte animeringar eller deras aktuella värden. |
| CloneCore(Freezable) |
Gör den här instansen till en djup kopia av den angivna BitmapSource. När du kopierar beroendeegenskaper kopierar den här metoden resursreferenser och databindningar (men de kanske inte längre matchar) men inte animeringar eller deras aktuella värden. (Ärvd från BitmapSource) |
| CloneCurrentValue() |
Skapar en modifierbar klon av det här ByteAnimationUsingKeyFrames objektet, vilket gör djupa kopior av objektets aktuella värden. Resursreferenser, databindningar och animeringar kopieras inte, men deras aktuella värden är det. |
| CloneCurrentValueCore(Freezable) |
Gör den här instansen till en ändringsbar djupkopia av den angivna BitmapSource med hjälp av aktuella egenskapsvärden. Resursreferenser, databindningar och animeringar kopieras inte, men deras aktuella värden är det. (Ärvd från BitmapSource) |
| CoerceValue(DependencyProperty) |
Tvingar fram värdet för den angivna beroendeegenskapen. Detta uppnås genom att anropa alla CoerceValueCallback funktioner som anges i egenskapsmetadata för beroendeegenskapen eftersom den finns på anropet DependencyObject. (Ärvd från DependencyObject) |
| CopyPixels(Array, Int32, Int32) |
Kopierar bitmappspixeldata till en matris med pixlar med angivet steg, med början vid den angivna förskjutningen. (Ärvd från BitmapSource) |
| CopyPixels(Int32Rect, Array, Int32, Int32) |
Kopierar bitmappspixeldata i den angivna rektangeln till en matris med pixlar som har den angivna stegen från och med den angivna förskjutningen. (Ärvd från BitmapSource) |
| CopyPixels(Int32Rect, IntPtr, Int32, Int32) |
Kopierar bitmappspixeldata i den angivna rektangeln. (Ärvd från BitmapSource) |
| CreateInstance() |
Initierar en ny instans av Freezable klassen. (Ärvd från Freezable) |
| CreateInstanceCore() |
När den implementeras i en härledd klass skapar du en ny instans av den Freezable härledda klassen. (Ärvd från Freezable) |
| Equals(Object) |
Avgör om en angivet DependencyObject motsvarar den aktuella DependencyObject. (Ärvd från DependencyObject) |
| Freeze() |
Gör det aktuella objektet ommodifierbart och anger dess IsFrozen egenskap till |
| FreezeCore(Boolean) |
Gör en instans av BitmapSource eller en härledd klass oföränderlig. (Ärvd från BitmapSource) |
| GetAnimationBaseValue(DependencyProperty) |
Returnerar det icke-animerade värdet för det angivna DependencyProperty. (Ärvd från Animatable) |
| GetAsFrozen() |
Skapar en frusen Freezablekopia av , med hjälp av grundläggande (icke-animerade) egenskapsvärden. Eftersom kopian är låst kopieras alla frysta underobjekt som referens. (Ärvd från Freezable) |
| GetAsFrozenCore(Freezable) |
Gör den här instansen till en klon av det angivna BitmapSource objektet. (Ärvd från BitmapSource) |
| GetCurrentValueAsFrozen() |
Skapar en frusen Freezable kopia av med aktuella egenskapsvärden. Eftersom kopian är låst kopieras alla frysta underobjekt som referens. (Ärvd från Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Gör den här instansen till en frusen klon av angiven BitmapSource. Resursreferenser, databindningar och animeringar kopieras inte, men deras aktuella värden är det. (Ärvd från BitmapSource) |
| GetHashCode() |
Hämtar en hash-kod för den här DependencyObject. (Ärvd från DependencyObject) |
| GetLocalValueEnumerator() |
Skapar en specialiserad uppräknare för att avgöra vilka beroendeegenskaper som har lokalt angivna värden för den här DependencyObject. (Ärvd från DependencyObject) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| GetValue(DependencyProperty) |
Returnerar det aktuella effektiva värdet för en beroendeegenskap för den här instansen av en DependencyObject. (Ärvd från DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Utvärderar det effektiva värdet för den angivna beroendeegenskapen igen. (Ärvd från DependencyObject) |
| Lock() |
Reserverar serverbufferten för uppdateringar. |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| OnChanged() |
Anropas när det aktuella Freezable objektet ändras. (Ärvd från Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Den här medlemmen stöder infrastrukturen för Windows Presentation Foundation (WPF) och är inte avsedd att användas direkt från koden. (Ärvd från Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Ser till att lämpliga kontextpekare upprättas för en DependencyObjectType datamedlem som just har angetts. (Ärvd från Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Åsidosätter implementeringen DependencyObject av OnPropertyChanged(DependencyPropertyChangedEventArgs) för att även anropa alla Changed hanterare som svar på en ändrad beroendeegenskap av typen Freezable. (Ärvd från Freezable) |
| ReadLocalValue(DependencyProperty) |
Returnerar det lokala värdet för en beroendeegenskap, om den finns. (Ärvd från DependencyObject) |
| ReadPreamble() |
Säkerställer att åtkomsten Freezable görs från en giltig tråd. Arvtagare Freezable till måste anropa den här metoden i början av ett API som läser datamedlemmar som inte är beroendeegenskaper. (Ärvd från Freezable) |
| SetCurrentValue(DependencyProperty, Object) |
Anger värdet för en beroendeegenskap utan att ändra dess värdekälla. (Ärvd från DependencyObject) |
| SetValue(DependencyProperty, Object) |
Anger det lokala värdet för en beroendeegenskap som anges av dess beroendeegenskapsidentifierare. (Ärvd från DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Anger det lokala värdet för en skrivskyddad beroendeegenskap som anges av identifieraren DependencyPropertyKey för beroendeegenskapen. (Ärvd från DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Returnerar ett värde som anger om serialiseringsprocesser ska serialisera värdet för den angivna beroendeegenskapen. (Ärvd från DependencyObject) |
| ToString() |
Skapar en strängrepresentation av det här objektet baserat på den aktuella kulturen. (Ärvd från ImageSource) |
| ToString(IFormatProvider) |
Skapar en strängrepresentation av det här objektet baserat på det IFormatProvider skickade objektet. Om providern är |
| TryLock(Duration) |
Försöker låsa bitmappen och väntar inte längre än den angivna tidsperioden. |
| Unlock() |
Släpper tillbaka bufferten för att göra den tillgänglig för visning. |
| VerifyAccess() |
Framtvingar att den anropande tråden har åtkomst till den här DispatcherObject. (Ärvd från DispatcherObject) |
| WritePixels(Int32Rect, Array, Int32, Int32, Int32) |
Uppdaterar bildpunkterna i den angivna regionen i bitmappen. |
| WritePixels(Int32Rect, Array, Int32, Int32) |
Uppdaterar bildpunkterna i den angivna regionen i bitmappen. |
| WritePixels(Int32Rect, IntPtr, Int32, Int32, Int32, Int32) |
Uppdaterar bildpunkterna i den angivna regionen i bitmappen. |
| WritePixels(Int32Rect, IntPtr, Int32, Int32) |
Uppdaterar bildpunkterna i den angivna regionen i bitmappen. |
| WritePostscript() |
Genererar Changed händelsen för Freezable och anropar dess OnChanged() metod. Klasser som härleds från Freezable bör anropa den här metoden i slutet av alla API:er som ändrar klassmedlemmar som inte lagras som beroendeegenskaper. (Ärvd från Freezable) |
| WritePreamble() |
Verifierar att Freezable inte är låst och att den nås från en giltig trådkontext. Freezable ärver bör anropa den här metoden i början av ett API som skriver till datamedlemmar som inte är beroendeegenskaper. (Ärvd från Freezable) |
Händelser
| Name | Description |
|---|---|
| Changed |
Inträffar när eller Freezable ett objekt som det innehåller ändras. (Ärvd från Freezable) |
| DecodeFailed |
Inträffar när avbildningen inte kan läsas in på grund av ett skadat bildhuvud. (Ärvd från BitmapSource) |
| DownloadCompleted |
Inträffar när bitmappsinnehållet har laddats ned helt. (Ärvd från BitmapSource) |
| DownloadFailed |
Inträffar när bitmappsinnehållet inte kunde laddas ned. (Ärvd från BitmapSource) |
| DownloadProgress |
Inträffar när nedladdningsstatusen för bitmappsinnehållet har ändrats. (Ärvd från BitmapSource) |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Formaterar värdet för den aktuella instansen med det angivna formatet. (Ärvd från ImageSource) |