Estou tentando ligar um único pixel em um Windows Form.
graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels
graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels
A API realmente deveria ter um método para definir a cor de um pixel, mas não vejo nenhum.
Estou usando C #.
Respostas:
Isso definirá um único pixel:
fonte
DrawRectangle()
. Se tiver,Pen.Alignment = PenAlignment.Outset
ele desenharáPen.Width
um contorno grosso em pixels ao redor do retângulo fornecido. Mas se você especificar,Pen.Alignment = PenAlignment.Inset
ele desenhará Pen.Width pixels de espessura "contorno" dentro do retângulo dado.O
Graphics
objeto não tem isso, pois é uma abstração e poderia ser usado para cobrir um formato de gráfico vetorial. Nesse contexto, definir um único pixel não faria sentido. OBitmap
formato da imagem temGetPixel()
eSetPixel()
, mas não um objeto gráfico construído em um. Para o seu cenário, sua opção realmente parece ser a única porque não existe uma maneira única de definir um único pixel para um objeto gráfico geral (e você não sabe EXATAMENTE o que é, como seu controle / forma pode ter buffer duplo, etc.)Por que você precisa definir um único pixel?
fonte
Apenas para mostrar o código completo para a resposta de Henk Holterman:
fonte
Onde estou desenhando muitos pixels únicos (para várias exibições de dados personalizadas), tendo a desenhá-los em um bitmap e, em seguida, colocá-los na tela.
As operações Bitmap GetPixel e SetPixel não são particularmente rápidas porque fazem muitas verificações de limites, mas é muito fácil criar uma classe de 'bitmap rápido' que tenha acesso rápido a um bitmap.
fonte
Página MSDN em GetHdc
Eu acho que isto é o que você está procurando. Você precisará obter o HDC e então usar as chamadas GDI para usar SetPixel. Observe que um COLORREF em GDI é um DWORD que armazena uma cor BGR. Não há canal alfa e não é RGB como a estrutura de cores do GDI +.
Esta é uma pequena seção de código que escrevi para realizar a mesma tarefa:
fonte
Aparentemente, DrawLine desenha uma linha que é um pixel menor do comprimento real especificado. Não parece haver DrawPoint / DrawPixel / whatnot, mas em vez disso, você pode usar DrawRectangle com largura e altura definidas como 1 para desenhar um único pixel.
fonte
Desenhar uma linha 2px usando uma caneta com DashStyle.DashStyle.Dot desenha um único Pixel.
fonte