WPF Rect

WriteableBitmap を使って ImageBox に矩形を描画します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. WriteableBitmap を使うとピクセル(ドット)単位の演算を行うことが出来ます。
    WriteableBitmap を使って XAML で定義した ImageBox に矩形を描画してみましょう。
    [ファイル][新規作成][プロジェクト]から[Visual C#][Windows][WPF アプリ(.NET Framework)]を選んで下さい。
    ポインターを使うので[プロジェクト]メニューの[プロパティ]から[ビルド]を選択して[unsafe コードブロックの許可]を設定します。
    プロジェクトの作成は C# Store Application を参照して下さい。
  2. MainWindow.xaml を直接編集して ImageBox の領域(120*80)を定義します。
    名前を "image" に設定して下さい。
        <Grid Margin="0,10,0.333,-10.333">
            <Image x:Name="image" HorizontalAlignment="Left" Height="80"
                Margin="100,60,0,0" VerticalAlignment="Top" Width="120"/>
        </Grid>
    
  3. MainWindow.xaml.cs で WriteableBitmap wb; を定義します。
    Constructor から My_Draw(); 関数を呼び出します。
    My_Draw(); 関数では 120*80 の WriteableBitmap を生成して、青(p[0]=255; p[1]=64;)で塗りつぶします。
    AddDirtyRectで一部分のみを指定していればその部分の変更のみが適用され、他の部分は無視されます。
    今回は全領域(120*80)に変更を適用します。
    image.Source = wb; で WriteableBitmap を ImageBox に設定します。
        public partial class MainWindow : Window
        {
            private WriteableBitmap wb;
            public MainWindow()
            {
                InitializeComponent();
                My_Draw();
            }
            private void My_Draw()
            {
                wb = new WriteableBitmap(120, 80, 96, 96, PixelFormats.Bgr32, null);
                wb.Lock();
                unsafe
                {
                    byte* ptr = (byte*)wb.BackBuffer;
                    for (int y = 0; y < wb.PixelHeight; y++)
                    {
                        for (int x = 0; x < wb.PixelWidth; x++)
                        {
                            byte* p = ptr + (y * wb.BackBufferStride) + (x * 4);
                            p[0] = 255;
                            p[1] = 64;
                            p[2] = 0;
                            //p[3] = 0;
                        }
                    }
                }
                wb.AddDirtyRect(new Int32Rect(0, 0, wb.PixelWidth, wb.PixelHeight));
                wb.Unlock();
                image.Source = wb;
            }
        }
    }
    
  4. 開始ボタン(右三角)をクリックすると青い矩形がウインドウに描画されます。
    WPF では Windows10 のスタート画面にアプリが自動的に登録されることはありません。

超初心者のプログラム入門(C# Frame Work)