Windowsフォームで単一のピクセルをオンにしようとして立ち往生しています。
graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels
graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels
APIには実際には1ピクセルの色を設定するメソッドが必要ですが、1つは表示されません。
C#を使用しています。
Windowsフォームで単一のピクセルをオンにしようとして立ち往生しています。
graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels
graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels
APIには実際には1ピクセルの色を設定するメソッドが必要ですが、1つは表示されません。
C#を使用しています。
回答:
これは単一のピクセルを設定します:
e.Graphics.FillRectangle(aBrush, x, y, 1, 1);
DrawRectangle()
。ある場合は、指定された長方形の周りにピクセルの太い輪郭Pen.Alignment = PenAlignment.Outset
を描きPen.Width
ます。しかし、指定Pen.Alignment = PenAlignment.Inset
した場合は、指定された長方形の内側に「輪郭」の太いPen.Widthピクセルが描画されます。
Graphics
オブジェクトは、それは抽象化だから、これを持っていないと、ベクターグラフィックス形式をカバーするために使用することができます。そのような状況では、単一のピクセルを設定しても意味がありません。Bitmap
画像フォーマットは持っているGetPixel()
とSetPixel()
1上に構築されたグラフィックスオブジェクトを、しかしありません。あなたのシナリオでは、一般的なグラフィックスオブジェクトに単一のピクセルを設定するための1つのサイズですべてに対応する方法がなく、コントロール/フォームとしてそれが何であるかを正確に知らないため、オプションは本当に唯一のオプションのように見えますダブルバッファリングなども可能です)
なぜ単一のピクセルを設定する必要があるのですか?
これはあなたが探しているものだと思います。HDCを取得し、GDI呼び出しを使用してSetPixelを使用する必要があります。GDIのCOLORREFはBGRカラーを格納するDWORDであることに注意してください。アルファチャネルはなく、GDI +のカラー構造のようなRGBではありません。
これは、同じタスクを実行するために私が書いたコードの小さなセクションです。
public class GDI
{
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
internal static extern bool SetPixel(IntPtr hdc, int X, int Y, uint crColor);
}
{
...
private void OnPanel_Paint(object sender, PaintEventArgs e)
{
int renderWidth = GetRenderWidth();
int renderHeight = GetRenderHeight();
IntPtr hdc = e.Graphics.GetHdc();
for (int y = 0; y < renderHeight; y++)
{
for (int x = 0; x < renderWidth; x++)
{
Color pixelColor = GetPixelColor(x, y);
// NOTE: GDI colors are BGR, not ARGB.
uint colorRef = (uint)((pixelColor.B << 16) | (pixelColor.G << 8) | (pixelColor.R));
GDI.SetPixel(hdc, x, y, colorRef);
}
}
e.Graphics.ReleaseHdc(hdc);
}
...
}