// 線・グレースケール
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>
実行例
グレースケール

カラー


コメント