WriteableBitmap Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje možnost zápisu BitmapSource a aktualizace.
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
- Dědičnost
-
WriteableBitmap
Příklady
Následující příklad ukazuje, jak WriteableBitmap lze použít jako zdroj Image kreslení pixelů při pohybu myši.
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);
}
}
}
Poznámky
WriteableBitmap Pomocí třídy můžete aktualizovat a vykreslit rastrový obrázek na základě jednotlivých snímků. To je užitečné pro generování algoritmického obsahu, například fraktálního obrázku, a pro vizualizaci dat, jako je vizualizér hudby.
Třída WriteableBitmap používá dvě vyrovnávací paměti. Vyrovnávací paměť zpět je přidělena v systémové paměti a shromažďuje obsah, který se aktuálně nezobrazuje. Front buffer je přidělen v systémové paměti a obsahuje obsah, který je aktuálně zobrazen. Systém vykreslování zkopíruje přední vyrovnávací paměť do paměti videa pro zobrazení.
Tato vyrovnávací paměť používají dvě vlákna. Vlákno uživatelského rozhraní generuje uživatelské rozhraní, ale nezobrazuje ho na obrazovku. Vlákno uživatelského rozhraní reaguje na vstup uživatele, časovače a další události. Aplikace může mít více vláken uživatelského rozhraní. Vlákno vykreslení se sestaví a vykreslí změny z vlákna uživatelského rozhraní. Pro každou aplikaci existuje pouze jedno vlákno vykreslování.
Vlákno uživatelského rozhraní zapisuje obsah do vyrovnávací paměti zpět. Vlákno vykreslení načte obsah z přední vyrovnávací paměti a zkopíruje ho do paměti videa. Změny vyrovnávací paměti zpět se sledují se změněnými obdélníkovými oblastmi.
Zavolejte jedno z WritePixels přetížení, které automaticky aktualizuje a zobrazí obsah v zadní vyrovnávací paměti.
Pro větší kontrolu nad aktualizacemi a vícevláknovým přístupem ke zpětné vyrovnávací paměti použijte následující pracovní postup.
Zavolejte metodu Lock pro rezervaci vyrovnávací paměti pro aktualizace.
Získání ukazatele na zadní vyrovnávací paměť přístupem k BackBuffer vlastnosti.
Zapište změny do vyrovnávací paměti zpět. Ostatní vlákna můžou při uzamčení zapisovat změny do vyrovnávací paměti WriteableBitmap zpět.
AddDirtyRect Voláním metody označte oblasti, které se změnily.
Zavolejte metodu Unlock , která uvolní zpět vyrovnávací paměť a povolí prezentaci na obrazovce.
Když se aktualizace odešlou do vykreslovacího vlákna, vlákno vykreslování zkopíruje změněné obdélníky ze zadní vyrovnávací paměti do frontové vyrovnávací paměti. Systém vykreslování tuto výměnu řídí, aby se zabránilo zablokování a překreslení artefaktů, jako je například "roztrhání".
Konstruktory
| Name | Description |
|---|---|
| WriteableBitmap(BitmapSource) |
Inicializuje novou instanci WriteableBitmap třídy pomocí dané BitmapSource. |
| WriteableBitmap(Int32, Int32, Double, Double, PixelFormat, BitmapPalette) |
Inicializuje novou instanci WriteableBitmap třídy se zadanými parametry. |
Vlastnosti
| Name | Description |
|---|---|
| BackBuffer |
Získá ukazatel na zadní vyrovnávací paměť. |
| BackBufferStride |
Získá hodnotu označující počet bajtů v jednom řádku pixelových dat. |
| CanFreeze |
Získá hodnotu, která označuje, zda objekt lze vytvořit nemodifovatelný. (Zděděno od Freezable) |
| DependencyObjectType |
DependencyObjectType Získá ten, který zabalí typ CLR této instance. (Zděděno od DependencyObject) |
| Dispatcher |
Dispatcher Získá toto DispatcherObject je přidružené. (Zděděno od DispatcherObject) |
| DpiX |
Získá vodorovné tečky na palec (dpi) obrázku. (Zděděno od BitmapSource) |
| DpiY |
Získá svislé tečky na palec (dpi) obrázku. (Zděděno od BitmapSource) |
| Format |
Získá nativní PixelFormat rastrová data. (Zděděno od BitmapSource) |
| HasAnimatedProperties |
Získá hodnotu, která určuje, zda jeden nebo více AnimationClock objektů je přidružen k některé z vlastností závislosti tohoto objektu. (Zděděno od Animatable) |
| Height |
Získá výšku zdrojového rastrového obrázku v jednotkách nezávislých na zařízení (1/96 palce na jednotku). (Zděděno od BitmapSource) |
| IsDownloading |
Získá hodnotu, která označuje, zda BitmapSource se obsah právě stahuje. (Zděděno od BitmapSource) |
| IsFrozen |
Získá hodnotu, která označuje, zda objekt je aktuálně upravitelný. (Zděděno od Freezable) |
| IsSealed |
Získá hodnotu, která označuje, zda je tato instance aktuálně zapečetěna (jen pro čtení). (Zděděno od DependencyObject) |
| Metadata |
Získá metadata, která jsou přidružena k tomuto rastrového obrázku. (Zděděno od BitmapSource) |
| Palette |
Získá barevnou paletu rastrového obrázku, pokud je zadána. (Zděděno od BitmapSource) |
| PixelHeight |
Získá výšku rastrového obrázku v pixelech. (Zděděno od BitmapSource) |
| PixelWidth |
Získá šířku rastrového obrázku v pixelech. (Zděděno od BitmapSource) |
| Width |
Získá šířku rastrového obrázku v jednotkách nezávislých na zařízení (1/96 palce na jednotku). (Zděděno od BitmapSource) |
Metody
| Name | Description |
|---|---|
| AddDirtyRect(Int32Rect) |
Určuje oblast rastrového obrázku, která se změnila. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Použije pro AnimationClock zadaný DependencyPropertyparametr . Pokud je vlastnost již animovaná, použije se zadané HandoffBehavior . (Zděděno od Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Použije pro AnimationClock zadaný DependencyPropertyparametr . Pokud je vlastnost již animované, použije se SnapshotAndReplace chování předání. (Zděděno od Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Použije animaci na zadanou DependencyPropertypoložku . Animace se spustí při vykreslení dalšího snímku. Pokud je zadaná vlastnost již animované, použije se zadaná HandoffBehavior vlastnost. (Zděděno od Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Použije animaci na zadanou DependencyPropertypoložku . Animace se spustí při vykreslení dalšího snímku. Pokud je zadaná vlastnost již animované, použije se SnapshotAndReplace chování předání. (Zděděno od Animatable) |
| CheckAccess() |
Určuje, zda volající vlákno má přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |
| CheckIfSiteOfOrigin() |
Zkontroluje, zda je zdrojový obsah rastrového obrázku ze známého webu původu. Tato metoda se používá k zajištění bezpečnosti operací kopírování pixelů. (Zděděno od BitmapSource) |
| ClearValue(DependencyProperty) |
Vymaže místní hodnotu vlastnosti. Vlastnost, která se má vymazat, je určena identifikátorem DependencyProperty . (Zděděno od DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Vymaže místní hodnotu vlastnosti jen pro čtení. Vlastnost, která má být vymazána, je určena parametrem DependencyPropertyKey. (Zděděno od DependencyObject) |
| Clone() |
Vytvoří upravitelný klon tohoto WriteableBitmapobjektu a vytvoří hluboké kopie hodnot tohoto objektu. Při kopírování vlastností závislostí tato metoda kopíruje odkazy na prostředky a datové vazby (ale nemusí se už překládat), ale ne animace nebo jejich aktuální hodnoty. |
| CloneCore(Freezable) |
Vytvoří tuto instanci hlubokou kopii zadaného BitmapSource. Při kopírování vlastností závislostí tato metoda kopíruje odkazy na prostředky a datové vazby (ale nemusí se už překládat), ale ne animace nebo jejich aktuální hodnoty. (Zděděno od BitmapSource) |
| CloneCurrentValue() |
Vytvoří upravitelný klon tohoto ByteAnimationUsingKeyFrames objektu a vytvoří hluboké kopie aktuálních hodnot tohoto objektu. Odkazy na prostředky, datové vazby a animace se nekopírují, ale jejich aktuální hodnoty jsou. |
| CloneCurrentValueCore(Freezable) |
Vytvoří tuto instanci upravitelnou hloubkovou kopii zadané BitmapSource pomocí aktuálních hodnot vlastností. Odkazy na prostředky, datové vazby a animace se nekopírují, ale jejich aktuální hodnoty jsou. (Zděděno od BitmapSource) |
| CoerceValue(DependencyProperty) |
Převede hodnotu zadané vlastnosti závislosti. Toho se dosahuje vyvoláním jakékoli CoerceValueCallback funkce zadané v metadatech vlastností pro vlastnost závislosti, protože existuje ve volání DependencyObject. (Zděděno od DependencyObject) |
| CopyPixels(Array, Int32, Int32) |
Zkopíruje rastrová pixelová data do pole pixelů se zadaným posunem počínaje zadaným posunem. (Zděděno od BitmapSource) |
| CopyPixels(Int32Rect, Array, Int32, Int32) |
Zkopíruje rastrová pixelová data v zadaném obdélníku do pole pixelů, které mají zadanou krok od zadaného posunu. (Zděděno od BitmapSource) |
| CopyPixels(Int32Rect, IntPtr, Int32, Int32) |
Zkopíruje rastrová pixelová data v zadaném obdélníku. (Zděděno od BitmapSource) |
| CreateInstance() |
Inicializuje novou instanci Freezable třídy. (Zděděno od Freezable) |
| CreateInstanceCore() |
Při implementaci v odvozené třídě vytvoří novou instanci odvozené Freezable třídy. (Zděděno od Freezable) |
| Equals(Object) |
Určuje, zda je poskytnutá DependencyObject hodnota ekvivalentní aktuálnímu DependencyObject. (Zděděno od DependencyObject) |
| Freeze() |
Nastaví aktuální objekt jako nemodifikovatelný a nastaví jeho IsFrozen vlastnost na |
| FreezeCore(Boolean) |
Vytvoří instanci BitmapSource nebo odvozenou třídu neměnnou. (Zděděno od BitmapSource) |
| GetAnimationBaseValue(DependencyProperty) |
Vrátí ne animovanou hodnotu zadané DependencyPropertyhodnoty . (Zděděno od Animatable) |
| GetAsFrozen() |
Vytvoří zablokovanou kopii Freezablevlastnosti , pomocí základních (ne animovaných) hodnot vlastností. Vzhledem k tomu, že je kopie zablokovaná, všechny ukotvené dílčí objekty se zkopírují odkazem. (Zděděno od Freezable) |
| GetAsFrozenCore(Freezable) |
Vytvoří tuto instanci klon zadaného BitmapSource objektu. (Zděděno od BitmapSource) |
| GetCurrentValueAsFrozen() |
Vytvoří ukotvenou kopii s použitím aktuálních Freezable hodnot vlastností. Vzhledem k tomu, že je kopie zablokovaná, všechny ukotvené dílčí objekty se zkopírují odkazem. (Zděděno od Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Vytvoří tuto instanci zmrazeným klonem zadaného BitmapSource. Odkazy na prostředky, datové vazby a animace se nekopírují, ale jejich aktuální hodnoty jsou. (Zděděno od BitmapSource) |
| GetHashCode() |
Získá hash kód pro tento DependencyObject. (Zděděno od DependencyObject) |
| GetLocalValueEnumerator() |
Vytvoří specializovaný enumerátor pro určení, které vlastnosti závislosti mají místně nastavené hodnoty na tomto DependencyObject. (Zděděno od DependencyObject) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| GetValue(DependencyProperty) |
Vrátí aktuální efektivní hodnotu vlastnosti závislosti na této instanci objektu DependencyObject. (Zděděno od DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Znovu vyhodnotí efektivní hodnotu pro zadanou vlastnost závislosti. (Zděděno od DependencyObject) |
| Lock() |
Zarezervuje zpět vyrovnávací paměť pro aktualizace. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| OnChanged() |
Volá se při změně aktuálního Freezable objektu. (Zděděno od Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Tento člen podporuje infrastrukturu Windows Presentation Foundation (WPF) a není určená k použití přímo z vašeho kódu. (Zděděno od Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Zajišťuje, aby byly pro datový člen, který byl právě nastaven, vytvořeny DependencyObjectType příslušné kontextové ukazatele. (Zděděno od Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Přepíše implementaci DependencyObjectOnPropertyChanged(DependencyPropertyChangedEventArgs) také vyvolat všechny Changed obslužné rutiny v reakci na měnící se závislost vlastnost typu Freezable. (Zděděno od Freezable) |
| ReadLocalValue(DependencyProperty) |
Vrátí místní hodnotu vlastnosti závislosti, pokud existuje. (Zděděno od DependencyObject) |
| ReadPreamble() |
Zajišťuje, že se k němu Freezable přistupuje z platného vlákna. Dědiče Freezable této metody musí volat tuto metodu na začátku jakéhokoli rozhraní API, které čte datové členy, které nejsou vlastnostmi závislosti. (Zděděno od Freezable) |
| SetCurrentValue(DependencyProperty, Object) |
Nastaví hodnotu vlastnosti závislosti beze změny jejího zdroje hodnot. (Zděděno od DependencyObject) |
| SetValue(DependencyProperty, Object) |
Nastaví místní hodnotu vlastnosti závislosti určenou jeho identifikátorem vlastnosti závislosti. (Zděděno od DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Nastaví místní hodnotu vlastnosti závislosti jen pro čtení určenou identifikátorem DependencyPropertyKey vlastnosti závislosti. (Zděděno od DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Vrátí hodnotu, která určuje, zda procesy serializace mají serializovat hodnotu pro zadanou vlastnost závislosti. (Zděděno od DependencyObject) |
| ToString() |
Vytvoří řetězcovou reprezentaci tohoto objektu na základě aktuální jazykové verze. (Zděděno od ImageSource) |
| ToString(IFormatProvider) |
Vytvoří řetězcovou reprezentaci tohoto objektu na základě předaného objektu IFormatProvider . Pokud je |
| TryLock(Duration) |
Pokusí se zamknout rastrový obrázek a čekat déle než zadanou dobu. |
| Unlock() |
Uvolní vyrovnávací paměť zpět, aby byla k dispozici pro zobrazení. |
| VerifyAccess() |
Vynucuje, že volající vlákno má přístup k tomuto DispatcherObject. (Zděděno od DispatcherObject) |
| WritePixels(Int32Rect, Array, Int32, Int32, Int32) |
Aktualizuje pixely v zadané oblasti rastrového obrázku. |
| WritePixels(Int32Rect, Array, Int32, Int32) |
Aktualizuje pixely v zadané oblasti rastrového obrázku. |
| WritePixels(Int32Rect, IntPtr, Int32, Int32, Int32, Int32) |
Aktualizuje pixely v zadané oblasti rastrového obrázku. |
| WritePixels(Int32Rect, IntPtr, Int32, Int32) |
Aktualizuje pixely v zadané oblasti rastrového obrázku. |
| WritePostscript() |
Changed Vyvolá událost pro událost Freezable a vyvolá její OnChanged() metodu. Třídy odvozené z Freezable by měly volat tuto metodu na konci jakéhokoli rozhraní API, které upravuje členy třídy, které nejsou uloženy jako vlastnosti závislosti. (Zděděno od Freezable) |
| WritePreamble() |
Ověřuje, že Freezable není zablokovaný a že k němu přistupujete z platného kontextu podprocesu. Freezable dědiče by měly tuto metodu volat na začátku jakéhokoli rozhraní API, které zapisuje do datových členů, které nejsou vlastnostmi závislosti. (Zděděno od Freezable) |
Událost
| Name | Description |
|---|---|
| Changed |
Nastane, když Freezable je objekt, který obsahuje, změněn. (Zděděno od Freezable) |
| DecodeFailed |
Nastane, když se image nepodaří načíst, protože je poškozená hlavička obrázku. (Zděděno od BitmapSource) |
| DownloadCompleted |
Nastane, když je rastrový obrázek zcela stažen. (Zděděno od BitmapSource) |
| DownloadFailed |
Nastane v případě, že se nepodařilo stáhnout rastrový obsah. (Zděděno od BitmapSource) |
| DownloadProgress |
Nastane, když se změní průběh stahování rastrového obsahu. (Zděděno od BitmapSource) |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Naformátuje hodnotu aktuální instance pomocí zadaného formátu. (Zděděno od ImageSource) |