Paint - rysowanie piórem

0

Witam, to moje pierwsze starcie z C#. Piszę coś na wzór Painta. Ze wszystkiego jestem zadowolony poza jednym.

if (e.Button == MouseButtons.Left)
                {
                    g.DrawLine(pioro, p, e.Location);
                    p = e.Location;
                }

g - to graphics
p - to point

Działać działa, ale przy zwiększeniu szerokości pióra (np. na 10) widać tak jakby prześwity - ścieżka jest słabej jakości.
Próbowałem z g.SmoothingMode = SmoothingMode.HighQuality; - ale niewiele pomaga.

Załączam screen. W czym jest problem? Jak sobie z tym poradzić?

0

DoubleBuffered masz na true?

0

Po prostu w konstruktorze mam dopisać

DoubleBuffered = true;

?
Jeśli tak, to nie widzę żadnej różnicy. Może powinienem użyć czegoś innego zamiast DrawLine?

W ogóle przepraszam za nazwę tematu - Rysowanie piórem a nie piórek. Nie mogę już dokonać edycji.

0

Podwójne buforowanie służy aby wyeliminować mruganie formy - przepraszam. Spróbuj tego:

 
Twoja_instancja_klast_Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
Twoja_instancja_klast_Graphic.SmoothingMode = SmoothingMode.HighQuality; //To już masz pisałeś.
0

Sprawdzałem wcześniej - nie nie daje.
Patrzyłem całą czwórkę:

g.SmoothingMode = SmoothingMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
DoubleBuffered = true;
0

Może spróbuj jeszcze tego, wygładzanie krawędzi:

e.Graphics.SmoothingMode = SmoothingMode.AntiAlias 
1

Może trochę rozjaśnię jeszcze jednym screenem. Problem jest z samą końcówką, która jest tak jakby plusem "+".
Przy rozmiarze 50 wygląda to tak, jak na dołączonym niżej screenie. Rzecz jasna próbowałem użyć:

pioro.DashCap = DashCap.Round;

Ale różnicy nie widzę żadnej.

Może powinienem zrobić własną końcówkę poprzez AdjustableArrowCap? Tylko np.

AdjustableArrowCap koncowka = new AdjustableArrowCap(1, 1);

Tworzy trójkąt, a ja chcę najlepiej kółeczko. Jestem pewien, że w końcówce tkwi problem... bo przerw już nie ma, ale znowu fatalnie mieć taką końcówkę.

PROBLEM ROZWIĄZAŁEM -pioro.EndCap = LineCap.Round;

1 użytkowników online, w tym zalogowanych: 0, gości: 1