Soru DrawRectangle'ta kenarlık


Eh, OnPaint olayını kendi kontrolüm için kodluyorum ve piksel-doğru yapmak için benim için çok kullanışlıdır.

Dikdörtgenlerin sınırları ile ilgili küçük bir sorunum var.

Resmi görmek:

ölü ImageShack bağlantısı kaldırıldı

Bu iki dikdörtgen, aynı konum ve boyut parametreleriyle çizildi, ancak kalemin farklı boyutlarını kullanıyordu. Ne olduğunu görüyor musun? Sınır büyüdükçe, dikdörtgenden (solda) önce boş alanı yediler.

Dikdörtgenin içine kenarlık çizen bir çeşit özellik olup olmadığını merak ediyorum, böylece dikdörtgene uzaklık her zaman aynı olacaktır. Teşekkürler.


25
2018-05-29 11:17


Menşei




Cevaplar:


Bunu belirterek bunu yapabilirsiniz PenAlignment

Pen pen = new Pen(Color.Black, 2);
pen.Alignment = PenAlignment.Inset; //<-- this
g.DrawRectangle(pen, rect);

47
2018-04-27 10:51



Bu kabul edilen cevap olmalı - Dmitry Polyanitsa
Anlaşılan, bu asıl sorunun doğru cevabı - Stewart Ritchie


Dikdörtgenin dış sınırlarının her yönde kısıtlanmasını istiyorsanız, kalem genişliğine göre yeniden hesaplamanız gerekir:

private void DrawRectangle(Graphics g, Rectangle rect, float penWidth)
{
    using (Pen pen = new Pen(SystemColors.ControlDark, penWidth))
    {
        float shrinkAmount = pen.Width / 2;
        g.DrawRectangle(
            pen,
            rect.X + shrinkAmount,   // move half a pen-width to the right
            rect.Y + shrinkAmount,   // move half a pen-width to the down
            rect.Width - penWidth,   // shrink width with one pen-width
            rect.Height - penWidth); // shrink height with one pen-width
    }
}

6
2018-05-29 11:39





Bu sorunun doğrudan bir cevabı değil, ancak ControlPaint.DrawBorder yöntem. Kenarlık stilini, rengini ve diğer çeşitli özellikleri belirtebilirsiniz. bende inanmak kenar boşluklarını sizin için ayarlamayı sağlar.


1
2018-05-29 11:26



Sınırı doğru çizse de, bazı fonksiyonlar için bu fonksiyon DrawRectangle'den çok daha fazla işlemci süresi kullanır. - undsoft
@undsoft: Evet, çok şaşırmazdım. Sahnelerin ardında nasıl çalıştığından emin değilim, ancak diğer şeylerin yanı sıra 3D ve diğer stil sınırları çizebildiğinden, kesinlikle DrawRectangle'den çok daha karmaşıktır. - Noldorin


Sanırım değil ... ama çizim pozisyonunu kalem büyüklüğünün yarısını sağa taşıyabilirsiniz.


0
2018-05-29 11:21