WPFヘルパー:ImageBufferHelper.cs – DrawLine 線の描画

コンピュータ

ImageBufferHelper.cs

       // 線・グレースケール
        public void DrawLine(int x0, int y0, int x1, int y1, byte v)
        {
            int dx = Math.Abs(x1 - x0);
            int dy = -Math.Abs(y1 - y0);
            int sx = x0 < x1 ? 1 : -1;
            int sy = y0 < y1 ? 1 : -1;
            int err = dx + dy;

            while (true)
            {
                SetPixel(x0, y0, v);

                if (x0 == x1 && y0 == y1) break;

                int e2 = 2 * err;
                if (e2 >= dy) { err += dy; x0 += sx; }
                if (e2 <= dx) { err += dx; y0 += sy; }
            }
        }
        // 線・カラー
        public void DrawLine(int x0, int y0, int x1, int y1, byte r, byte g, byte b)
        {
            int dx = Math.Abs(x1 - x0);
            int dy = -Math.Abs(y1 - y0);
            int sx = x0 < x1 ? 1 : -1;
            int sy = y0 < y1 ? 1 : -1;
            int err = dx + dy;

            while (true)
            {
                SetPixel(x0, y0, r, g, b);

                if (x0 == x1 && y0 == y1) break;

                int e2 = 2 * err;
                if (e2 >= dy) { err += dy; x0 += sx; }
                if (e2 <= dx) { err += dx; y0 += sy; }
            }
        }

利用例
MainWindow.xaml.cs

using System.Windows;

using Maywork.WPF.Helpers;

namespace WpfSample01;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        
        var buff = ImageBufferHelper.Create(256, 256, 3); // カラーの場合、第3引数を1→3

        buff.DrawLine(0, 0, 255, 255, 255, 0, 0);

        Image1.Source = buff.ToBitmapSource();
    }
}

MainWindow.xaml

    <Grid>
        <Image x:Name="Image1" />
    </Grid>

ImageConverter.cs


実行例

グレースケール

カラー

コメント