2016-06-17 12 views
0

Ich habe eine C# winforms, wo ich ein Rechteck zeichnen und dann fülle ich es. HierC# Füllen Rechteck lässt einen Leerraum

ist der Code:

LinearGradientBrush secondGradient = new LinearGradientBrush(frontRect, Color.FromArgb(255, 190, 171, 18), Color.FromArgb(255, 152, 186, 27), 90); 

    /* second row element */ 
        g.DrawRectangle(pen, leftInsertionBox); 
        g.FillRectangle(secondGradient, leftInsertionBox.X + 1, leftInsertionBox.Y + 1, leftInsertionBox.Width - 1, leftInsertionBox.Height - 1); 

        g.DrawRectangle(pen, leftCoverBox); 
        g.FillRectangle(secondGradient, leftCoverBox.X + 1, leftCoverBox.Y + 1, leftCoverBox.Width - 1, leftCoverBox.Height - 1); 
        /* second row element */ 

Das Problem ist, dass ich wie ein Pixel Leerraum zwischen meinem Rechteck Linie und der Füllung zu sehen.

enter image description here

Jede Ahnung, wie dieses Problem zu lösen?

+1

Zuerst 'Fill' das ganze Rechteck (entfernen +1 Offsets), dann' Draw' –

+0

Ich kann das Bild nicht sehen, weil Imgur für mich blockiert ist, aber haben Sie versucht, es mit einem SolidBrush? – hometoast

+0

Haben Sie versucht, die Vorgänge in umgekehrter Reihenfolge auszuführen? Ich würde versuchen, die Füllung ohne Offset-Berechnungen (d. H. Füllen Sie das gesamte Rechteck) und zeichnen Sie dann die Grenze nach. – itsme86

Antwort

1

Ich würde versuchen, die Operationen umzukehren. Führen Sie zuerst die Fülloperation aus, entfernen Sie die Offsetberechnungen (d. H. Füllen Sie die gesamte Region aus), und zeichnen Sie dann die Umrandung.

g.FillRectangle(secondGradient, leftInsertionBox.X, leftInsertionBox.Y, leftInsertionBox.Width, leftInsertionBox.Height); 
g.DrawRectangle(pen, leftInsertionBox); 

g.FillRectangle(secondGradient, leftCoverBox.X, leftCoverBox.Y, leftCoverBox.Width, leftCoverBox.Height); 
g.DrawRectangle(pen, leftCoverBox); 
0

Versuchen Sie, das zusätzliche Pixel, das Sie hinzugefügt haben, zu entfernen.