Paint - rysowanie piórem

Paint - rysowanie piórem
WN
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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ć?

CI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 184
0

DoubleBuffered masz na true?

WN
  • Rejestracja: dni
  • Ostatnio: dni
0

Po prostu w konstruktorze mam dopisać

Kopiuj
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.

CI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 184
0

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

Kopiuj
 
Twoja_instancja_klast_Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
Twoja_instancja_klast_Graphic.SmoothingMode = SmoothingMode.HighQuality; //To już masz pisałeś.
WN
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
g.SmoothingMode = SmoothingMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
DoubleBuffered = true;
CI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 184
0

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

Kopiuj
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias 
WN
  • Rejestracja: dni
  • Ostatnio: dni
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ć:

Kopiuj
pioro.DashCap = DashCap.Round;

Ale różnicy nie widzę żadnej.

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

Kopiuj
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;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.