Windows Form에서 단일 픽셀을 켜려고 노력 중입니다.
graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels
graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels
API에는 실제로 한 픽셀의 색상을 설정하는 메서드가 있어야하지만 하나는 표시되지 않습니다.
C #을 사용하고 있습니다.
Windows Form에서 단일 픽셀을 켜려고 노력 중입니다.
graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels
graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels
API에는 실제로 한 픽셀의 색상을 설정하는 메서드가 있어야하지만 하나는 표시되지 않습니다.
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()
,하지만 그래픽 하나에 내장 된 개체가 아닙니다. 시나리오의 경우 일반 그래픽 개체에 대해 단일 픽셀을 설정하는 한 가지 방법이 없기 때문에 옵션이 실제로 유일한 것처럼 보입니다 (컨트롤 / 양식으로 정확히 무엇인지 알 수 없습니다. 이중 버퍼링 등)
단일 픽셀을 설정해야하는 이유는 무엇입니까?
나는 이것이 당신이 찾고있는 것이라고 생각합니다. HDC를 가져온 다음 GDI 호출을 사용하여 SetPixel을 사용해야합니다. GDI의 COLORREF는 BGR 색상을 저장하는 DWORD입니다. 알파 채널이없고 GDI +의 Color 구조처럼 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);
}
...
}
분명히 DrawLine은 실제 지정된 길이보다 1 픽셀 짧은 선을 그립니다. DrawPoint / DrawPixel / whatnot이없는 것 같지만 대신 너비와 높이가 1로 설정된 DrawRectangle을 사용하여 단일 픽셀을 그릴 수 있습니다.