この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

WriteableBitmap クラス

 

公開日: 2016年11月

提供、 BitmapSource に書き込まれ、更新するには、です。

名前空間:   System.Windows.Media.Imaging
アセンブリ:  PresentationCore (PresentationCore.dll 内)

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.DependencyObject
      System.Windows.Freezable
        System.Windows.Media.Animation.Animatable
          System.Windows.Media.ImageSource
            System.Windows.Media.Imaging.BitmapSource
              System.Windows.Media.Imaging.WriteableBitmap

public sealed class WriteableBitmap : BitmapSource

名前説明
System_CAPS_pubmethodWriteableBitmap(BitmapSource)

新しいインスタンスを初期化、 WriteableBitmap クラスを使用して、指定された BitmapSourceします。

System_CAPS_pubmethodWriteableBitmap(Int32, Int32, Double, Double, PixelFormat, BitmapPalette)

指定したパラメーターを使用して、WriteableBitmap クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyBackBuffer

バック バッファーへのポインターを取得します。

System_CAPS_pubpropertyBackBufferStride

単一行のピクセル データのバイト数を示す値を取得します。

System_CAPS_pubpropertyCanFreeze

オブジェクトを変更不可能にできるかどうかを示す値を取得します。(Freezable から継承されます。)

System_CAPS_pubpropertyDependencyObjectType

取得、 DependencyObjectType をラップする、 CLR のこのインスタンスの型。 (DependencyObject から継承されます。)

System_CAPS_pubpropertyDispatcher

取得、 Dispatcher この DispatcherObject に関連付けられています。(DispatcherObject から継承されます。)

System_CAPS_pubpropertyDpiX

水平方向を取得 ドット/インチ (dpi) イメージのです。 (BitmapSource から継承されます。)

System_CAPS_pubpropertyDpiY

垂直方向を取得 ドット/インチ (dpi) イメージのです。 (BitmapSource から継承されます。)

System_CAPS_pubpropertyFormat

ネイティブの取得 PixelFormat ビットマップ データのです。(BitmapSource から継承されます。)

System_CAPS_pubpropertyHasAnimatedProperties

示す値を取得するかどうか 1 つまたは複数 AnimationClock オブジェクトがこのオブジェクトの依存関係プロパティのいずれかに関連付けられています。(Animatable から継承されます。)

System_CAPS_pubpropertyHeight

[元のビットマップの高さを取得 デバイスに依存しない単位 (1 単位は 1/96 インチ)します。 (BitmapSource から継承されます。)

System_CAPS_pubpropertyIsDownloading

示す値を取得するかどうか、 BitmapSource 現在のコンテンツをダウンロードしています。(BitmapSource から継承されます。)

System_CAPS_pubpropertyIsFrozen

オブジェクトが変更可能かどうかを示す値を取得します。(Freezable から継承されます。)

System_CAPS_pubpropertyIsSealed

(読み取り専用)、このインスタンスが現在シールされているかどうかを示す値を取得します。(DependencyObject から継承されます。)

System_CAPS_pubpropertyMetadata

このビットマップ イメージに関連付けられているメタデータを取得します。(BitmapSource から継承されます。)

System_CAPS_pubpropertyPalette

指定されている場合、ビットマップの色パレットを取得します。(BitmapSource から継承されます。)

System_CAPS_pubpropertyPixelHeight

ビットマップの高さをピクセル単位で取得します。(BitmapSource から継承されます。)

System_CAPS_pubpropertyPixelWidth

ビットマップの幅をピクセル単位で取得します。(BitmapSource から継承されます。)

System_CAPS_pubpropertyWidth

ビットマップの幅を取得 デバイスに依存しない単位 (1 単位は 1/96 インチ)します。 (BitmapSource から継承されます。)

名前説明
System_CAPS_pubmethodAddDirtyRect(Int32Rect)

変更されるビットマップの領域を指定します。

System_CAPS_pubmethodApplyAnimationClock(DependencyProperty, AnimationClock)

AnimationClock を指定した DependencyProperty に適用します。 プロパティが既にアニメーション化されている場合は、SnapshotAndReplace ハンドオフ動作が使用されます。(Animatable から継承されます。)

System_CAPS_pubmethodApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)

AnimationClock を指定した DependencyProperty に適用します。 プロパティは既にアニメーション化される場合、指定した HandoffBehavior を使用します。(Animatable から継承されます。)

System_CAPS_pubmethodBeginAnimation(DependencyProperty, AnimationTimeline)

指定された DependencyProperty にアニメーションを適用します。 アニメーションは、次のフレームがレンダリングされるときに開始されます。 指定されたプロパティが既にアニメーション化されている場合は、SnapshotAndReplace ハンドオフ動作が使用されます。(Animatable から継承されます。)

System_CAPS_pubmethodBeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

指定された DependencyProperty にアニメーションを適用します。 アニメーションは、次のフレームがレンダリングされるときに開始されます。 指定したプロパティは既にアニメーション化される場合、指定した HandoffBehavior を使用します。(Animatable から継承されます。)

System_CAPS_pubmethodCheckAccess()

呼び出し元のスレッドがこれにアクセスをサポートしているかどうかを決定 DispatcherObjectします。(DispatcherObject から継承されます。)

System_CAPS_pubmethodClearValue(DependencyProperty)

プロパティのローカル値をクリアします。 クリアするプロパティは DependencyProperty 識別子で指定されます。(DependencyObject から継承されます。)

System_CAPS_pubmethodClearValue(DependencyPropertyKey)

読み取り専用プロパティのローカル値を消去します。 消去するプロパティは、DependencyPropertyKey で指定します。(DependencyObject から継承されます。)

System_CAPS_pubmethodClone()

この WriteableBitmap の変更可能な複製を作成し、このオブジェクトの値の詳細コピーを作成します。 このメソッドは、依存関係プロパティをコピーするときにリソース参照とデータ バインディングをコピーしますが (ただし、これらは解決されなくなる場合があります)、アニメーションやその現在の値はコピーしません。

System_CAPS_pubmethodCloneCurrentValue()

この ByteAnimationUsingKeyFrames オブジェクトの変更可能な複製を作成し、このオブジェクトの現在値の詳細コピーを作成します。 リソース参照、データ バインディング、アニメーションはコピーされませんが、それらの現在値はコピーされます。

System_CAPS_pubmethodCoerceValue(DependencyProperty)

指定した依存関係プロパティの値を強制します。 これは、呼び出し元の DependencyObject の依存関係プロパティのプロパティ メタデータで指定されている CoerceValueCallback 関数を呼び出すことによって実現されます。(DependencyObject から継承されます。)

System_CAPS_pubmethodCopyPixels(Array, Int32, Int32)

指定したオフセットで始まる、指定したストライドを持つピクセルの配列をビットマップのピクセル データをコピーします。(BitmapSource から継承されます。)

System_CAPS_pubmethodCopyPixels(Int32Rect, Array, Int32, Int32)

ビットマップのピクセル データを指定したオフセットから始まる指定したストライドを持つピクセルの配列に指定された四角形内にコピーします。(BitmapSource から継承されます。)

System_CAPS_pubmethodCopyPixels(Int32Rect, IntPtr, Int32, Int32)

指定された四角形内でビットマップのピクセル データをコピーします。 (BitmapSource から継承されます。)

System_CAPS_pubmethodEquals(Object)

指定されたかどうかを決定 DependencyObject は現在と同じ DependencyObjectします。(DependencyObject から継承されます。)

System_CAPS_pubmethodFreeze()

現在のオブジェクトを変更不可能にし、その IsFrozen プロパティを true に設定します。(Freezable から継承されます。)

System_CAPS_pubmethodGetAnimationBaseValue(DependencyProperty)

指定したアニメーション化されていない値を返す DependencyPropertyします。(Animatable から継承されます。)

System_CAPS_pubmethodGetAsFrozen()

固定コピーを作成、 Freezable, 、基本 (アニメーション化されていない) のプロパティの値を使用します。 コピーが固定されているために、任意の固定されたサブオブジェクトは、参照によってコピーされます。(Freezable から継承されます。)

System_CAPS_pubmethodGetCurrentValueAsFrozen()

固定コピーを作成、 Freezable プロパティの現在の値を使用します。 コピーが固定されているために、任意の固定されたサブオブジェクトは、参照によってコピーされます。(Freezable から継承されます。)

System_CAPS_pubmethodGetHashCode()

この DependencyObject のハッシュ コードを取得します。(DependencyObject から継承されます。)

System_CAPS_pubmethodGetLocalValueEnumerator()

どの依存関係プロパティに値を設定ローカルに決定するための特殊な列挙子を作成 DependencyObjectします。(DependencyObject から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodGetValue(DependencyProperty)

DependencyObject のこのインスタンスにある依存関係プロパティの現在の有効値を返します。(DependencyObject から継承されます。)

System_CAPS_pubmethodInvalidateProperty(DependencyProperty)

指定した依存関係プロパティに対する有効な値を再評価します。(DependencyObject から継承されます。)

System_CAPS_pubmethodLock()

更新プログラムのバック バッファーを予約します。

System_CAPS_pubmethodReadLocalValue(DependencyProperty)

ローカルの依存関係プロパティの値を返します (存在する場合)。(DependencyObject から継承されます。)

System_CAPS_pubmethodSetCurrentValue(DependencyProperty, Object)

依存関係プロパティ値のソースを変更せずにその値を設定します。(DependencyObject から継承されます。)

System_CAPS_pubmethodSetValue(DependencyProperty, Object)

依存関係プロパティ識別子を指定して、該当する依存関係プロパティのローカル値を設定します。(DependencyObject から継承されます。)

System_CAPS_pubmethodSetValue(DependencyPropertyKey, Object)

依存関係プロパティの DependencyPropertyKey 識別子で指定した読み取り専用の依存関係プロパティのローカル値を設定します。(DependencyObject から継承されます。)

System_CAPS_protmethodShouldSerializeProperty(DependencyProperty)

シリアル化プロセスが、指定された依存関係プロパティの値をシリアル化する必要があるかどうかを示す値を返します。(DependencyObject から継承されます。)

System_CAPS_pubmethodToString()

現在のカルチャに基づくこのオブジェクトの文字列表現を作成します。(ImageSource から継承されます。)

System_CAPS_pubmethodToString(IFormatProvider)

に基づいて、このオブジェクトの文字列表現を作成、 IFormatProvider に渡されます。 プロバイダーの場合 null, 、 CurrentCulture を使用します。(ImageSource から継承されます。)

System_CAPS_pubmethodTryLock(Duration)

ビットマップのロックしようと待機時間の指定された長さよりもします。

System_CAPS_pubmethodUnlock()

表示するために使用できるようにバック バッファーを解放します。

System_CAPS_pubmethodVerifyAccess()

呼び出し元のスレッドがへのアクセスを持つことを強制DispatcherObjectです。(DispatcherObject から継承されます。)

System_CAPS_pubmethodWritePixels(Int32Rect, Array, Int32, Int32)

ビットマップの指定した領域のピクセルを更新します。

System_CAPS_pubmethodWritePixels(Int32Rect, Array, Int32, Int32, Int32)

ビットマップの指定した領域のピクセルを更新します。

System_CAPS_pubmethodWritePixels(Int32Rect, IntPtr, Int32, Int32)

ビットマップの指定した領域のピクセルを更新します。

System_CAPS_pubmethodWritePixels(Int32Rect, IntPtr, Int32, Int32, Int32, Int32)

ビットマップの指定した領域のピクセルを更新します。

名前説明
System_CAPS_pubeventChanged

発生したときに、 Freezable またはが含まれているオブジェクトが変更されています。(Freezable から継承されます。)

System_CAPS_pubeventDecodeFailed

イメージを読み込むには、破損したイメージのヘッダーのために失敗した場合に発生します。(BitmapSource から継承されます。)

System_CAPS_pubeventDownloadCompleted

ビットマップ コンテンツのダウンロードが完了したときに発生します。(BitmapSource から継承されます。)

System_CAPS_pubeventDownloadFailed

ビットマップ コンテンツのダウンロードが失敗したときに発生します。(BitmapSource から継承されます。)

System_CAPS_pubeventDownloadProgress

ビットマップ コンテンツのダウンロード状況が変化したときに発生します。(BitmapSource から継承されます。)

名前説明
System_CAPS_pubinterfaceSystem_CAPS_privmethodIFormattable.ToString(String, IFormatProvider)

指定された書式を使用して現在のインスタンスの値を書式設定します。(ImageSource から継承されます。)

使用して、 WriteableBitmap クラスを更新およびがフレームごとにビットマップをレンダリングします。 これはフラクタル イメージなどのアルゴリズム コンテンツを生成して、音楽ビジュアライザーなどのデータの視覚化に役立ちます。

WriteableBitmap クラスは 2 つのバッファーを使用します。 バック バッファー システム メモリ内で割り当てられているし、現在表示されていないコンテンツを累積します。 フロント バッファー システム メモリ内で割り当てられているし、現在表示されているコンテンツが含まれています。 レンダリング システムは、前面のバッファーを表示するためのビデオ メモリにコピーします。

2 つのスレッドは、これらのバッファーを使用します。 ユーザー インターフェイス (UI) スレッド UI を生成しますが、画面に表示しません。 UI スレッドは、ユーザー入力、タイマー、およびその他のイベントに応答します。 アプリケーションは、複数の UI スレッドでことができます。 レンダリング スレッド を作成して、UI スレッドからの変更を描画します。 アプリケーションごとに 1 つのみのレンダリング スレッドがあります。

UI スレッドは、コンテンツをバック バッファーに書き込みます。 レンダリング スレッドでは、フロント バッファーからコンテンツを読み取り、ビデオ メモリにコピーします。 変更された四角形の領域を使用して、バック バッファーへの変更が追跡されます。

1 つを呼び出して、 WritePixels オーバー ロードを更新し、バック バッファーに自動的にコンテンツを表示します。

更新プログラム、さらに制御およびバック バッファーへのマルチ スレッド アクセスでは、次のワークフローを使用します。

  1. 呼び出す、 Lock に更新プログラムのバック バッファーを予約するメソッドです。

  2. アクセスすることによってバック バッファーへのポインターを取得、 BackBuffer プロパティです。

  3. バック バッファーへの変更を書き込みます。 他のスレッドに変更を書き込むことがあるときにバッファーを後に、 WriteableBitmap がロックされています。

  4. 呼び出す、 AddDirtyRect メソッドが変更された領域を示します。

  5. 呼び出す、 Unlock バック バッファーを解放し、画面にプレゼンテーションを許可するメソッドです。

更新プログラムがレンダリング スレッドに送信されると、レンダリング スレッドは、フロント バッファーにバック バッファーから変更された四角形をコピーします。 レンダリング システムは、このやり取りのデッドロックを回避し、「解除」などのアイテムを再描画を制御します。

次の例に示す方法、 WriteableBitmap のソースとして使用できる、 Image 、マウスを移動すると、ピクセルを描画します。

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;

            // Reserve the back buffer for updates.
            writeableBitmap.Lock();

            unsafe
            {
                // Get a pointer to the back buffer.
                int pBackBuffer = (int)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));

            // 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);
        }
    }
}

.NET Framework
3.0 以降で使用可能
Silverlight
3.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: