diff --git a/src/ImageSharp.Drawing/Brushes/Brushes{TColor}.cs b/src/ImageSharp.Drawing/Brushes/Brushes{TColor}.cs
index d77a6d594..6e092bf18 100644
--- a/src/ImageSharp.Drawing/Brushes/Brushes{TColor}.cs
+++ b/src/ImageSharp.Drawing/Brushes/Brushes{TColor}.cs
@@ -18,10 +18,9 @@ namespace ImageSharp.Drawing.Brushes
///
/// Percent10 Hatch Pattern
///
- /// note 2d arrays when configured using initalizer look inverted
- /// ---> Y axis
+ /// ---> x axis
/// ^
- /// | X - axis
+ /// | y - axis
/// |
/// see PatternBrush for details about how to make new patterns work
private static readonly bool[,] Percent10Pattern =
@@ -37,10 +36,10 @@ namespace ImageSharp.Drawing.Brushes
///
private static readonly bool[,] Percent20Pattern =
{
- { true, false, true, false },
- { false, false, false, false },
- { false, true, false, true },
- { false, false, false, false }
+ { true, false, false, false },
+ { false, false, true, false },
+ { true, false, false, false },
+ { false, false, true, false }
};
///
@@ -48,7 +47,10 @@ namespace ImageSharp.Drawing.Brushes
///
private static readonly bool[,] HorizontalPattern =
{
- { false, true, false, false },
+ { false },
+ { true },
+ { false },
+ { false }
};
///
@@ -56,7 +58,10 @@ namespace ImageSharp.Drawing.Brushes
///
private static readonly bool[,] MinPattern =
{
- { false, false, false, true },
+ { false },
+ { false },
+ { false },
+ { true }
};
///
@@ -64,10 +69,7 @@ namespace ImageSharp.Drawing.Brushes
///
private static readonly bool[,] VerticalPattern =
{
- { false },
- { true },
- { false },
- { false }
+ { false, true, false, false },
};
///
@@ -75,10 +77,10 @@ namespace ImageSharp.Drawing.Brushes
///
private static readonly bool[,] ForwardDiagonalPattern =
{
- { true, false, false, false },
- { false, true, false, false },
+ { false, false, false, true },
{ false, false, true, false },
- { false, false, false, true }
+ { false, true, false, false },
+ { true, false, false, false }
};
///
@@ -86,10 +88,10 @@ namespace ImageSharp.Drawing.Brushes
///
private static readonly bool[,] BackwardDiagonalPattern =
{
- { false, false, false, true },
- { false, false, true, false },
+ { true, false, false, false },
{ false, true, false, false },
- { true, false, false, false }
+ { false, false, true, false },
+ { false, false, false, true }
};
///
diff --git a/src/ImageSharp.Drawing/Brushes/PatternBrush{TColor}.cs b/src/ImageSharp.Drawing/Brushes/PatternBrush{TColor}.cs
index a143d6f31..9ebaf811a 100644
--- a/src/ImageSharp.Drawing/Brushes/PatternBrush{TColor}.cs
+++ b/src/ImageSharp.Drawing/Brushes/PatternBrush{TColor}.cs
@@ -30,15 +30,6 @@ namespace ImageSharp.Drawing.Brushes
/// 0
/// 0
///
- /// Warning when use array initializer across multiple lines the bools look inverted i.e.
- /// new bool[,]{
- /// {true, false, false},
- /// {false,true, false}
- /// }
- /// would be
- /// 10
- /// 01
- /// 00
///
/// The pixel format.
public class PatternBrush : IBrush
@@ -56,7 +47,18 @@ namespace ImageSharp.Drawing.Brushes
/// Color of the fore.
/// Color of the back.
/// The pattern.
- public PatternBrush(TColor foreColor, TColor backColor, Fast2DArray pattern)
+ public PatternBrush(TColor foreColor, TColor backColor, bool[,] pattern)
+ : this(foreColor, backColor, new Fast2DArray(pattern))
+ {
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Color of the fore.
+ /// Color of the back.
+ /// The pattern.
+ internal PatternBrush(TColor foreColor, TColor backColor, Fast2DArray pattern)
{
Vector4 foreColorVector = foreColor.ToVector4();
Vector4 backColorVector = backColor.ToVector4();
@@ -131,7 +133,8 @@ namespace ImageSharp.Drawing.Brushes
x = x % this.pattern.Width;
y = y % this.pattern.Height;
- return this.pattern[x, y];
+ // 2d array index at row/column
+ return this.pattern[y, x];
}
}
@@ -156,7 +159,9 @@ namespace ImageSharp.Drawing.Brushes
if (opacity > Constants.Epsilon)
{
Vector4 backgroundVector = this.Target[targetX, targetY].ToVector4();
- Vector4 sourceVector = this.patternVector[targetX % this.pattern.Height, targetX % this.pattern.Width];
+
+ // 2d array index at row/column
+ Vector4 sourceVector = this.patternVector[targetY % this.pattern.Height, targetX % this.pattern.Width];
Vector4 finalColor = Vector4BlendTransforms.PremultipliedLerp(backgroundVector, sourceVector, opacity);
diff --git a/tests/ImageSharp.Tests/Drawing/FillPatternTests.cs b/tests/ImageSharp.Tests/Drawing/FillPatternTests.cs
index d3c1877ab..56066a7aa 100644
--- a/tests/ImageSharp.Tests/Drawing/FillPatternTests.cs
+++ b/tests/ImageSharp.Tests/Drawing/FillPatternTests.cs
@@ -33,8 +33,9 @@ namespace ImageSharp.Tests.Drawing
{
// lets pick random spots to start checking
Random r = new Random();
- int xStride = expectedPattern.GetLength(1);
- int yStride = expectedPattern.GetLength(0);
+ var expectedPatternFast = new Fast2DArray(expectedPattern);
+ int xStride = expectedPatternFast.Width;
+ int yStride = expectedPatternFast.Height;
int offsetX = r.Next(image.Width / xStride) * xStride;
int offsetY = r.Next(image.Height / yStride) * yStride;
for (int x = 0; x < xStride; x++)
@@ -43,7 +44,7 @@ namespace ImageSharp.Tests.Drawing
{
int actualX = x + offsetX;
int actualY = y + offsetY;
- Color expected = expectedPattern[y, x]; // inverted pattern
+ Color expected = expectedPatternFast[y, x]; // inverted pattern
Color actual = sourcePixels[actualX, actualY];
if (expected != actual)
{
@@ -187,10 +188,10 @@ namespace ImageSharp.Tests.Drawing
{
Test("ForwardDiagonal", Color.Blue, Brushes.ForwardDiagonal(Color.HotPink, Color.LimeGreen),
new Color[,] {
- { Color.HotPink, Color.LimeGreen, Color.LimeGreen, Color.LimeGreen},
- { Color.LimeGreen, Color.HotPink, Color.LimeGreen, Color.LimeGreen},
+ { Color.LimeGreen, Color.LimeGreen, Color.LimeGreen, Color.HotPink},
{ Color.LimeGreen, Color.LimeGreen, Color.HotPink, Color.LimeGreen},
- { Color.LimeGreen, Color.LimeGreen, Color.LimeGreen, Color.HotPink}
+ { Color.LimeGreen, Color.HotPink, Color.LimeGreen, Color.LimeGreen},
+ { Color.HotPink, Color.LimeGreen, Color.LimeGreen, Color.LimeGreen}
});
}
@@ -199,10 +200,10 @@ namespace ImageSharp.Tests.Drawing
{
Test("ForwardDiagonal_Transparent", Color.Blue, Brushes.ForwardDiagonal(Color.HotPink),
new Color[,] {
- { Color.HotPink, Color.Blue, Color.Blue, Color.Blue},
- { Color.Blue, Color.HotPink, Color.Blue, Color.Blue},
+ { Color.Blue, Color.Blue, Color.Blue, Color.HotPink},
{ Color.Blue, Color.Blue, Color.HotPink, Color.Blue},
- { Color.Blue, Color.Blue, Color.Blue, Color.HotPink}
+ { Color.Blue, Color.HotPink, Color.Blue, Color.Blue},
+ { Color.HotPink, Color.Blue, Color.Blue, Color.Blue}
});
}
@@ -211,10 +212,10 @@ namespace ImageSharp.Tests.Drawing
{
Test("BackwardDiagonal", Color.Blue, Brushes.BackwardDiagonal(Color.HotPink, Color.LimeGreen),
new Color[,] {
- { Color.LimeGreen, Color.LimeGreen, Color.LimeGreen, Color.HotPink},
- { Color.LimeGreen, Color.LimeGreen, Color.HotPink, Color.LimeGreen},
- { Color.LimeGreen, Color.HotPink, Color.LimeGreen, Color.LimeGreen},
- { Color.HotPink, Color.LimeGreen, Color.LimeGreen, Color.LimeGreen}
+ { Color.HotPink, Color.LimeGreen, Color.LimeGreen, Color.LimeGreen},
+ { Color.LimeGreen, Color.HotPink, Color.LimeGreen, Color.LimeGreen},
+ { Color.LimeGreen, Color.LimeGreen, Color.HotPink, Color.LimeGreen},
+ { Color.LimeGreen, Color.LimeGreen, Color.LimeGreen, Color.HotPink}
});
}
@@ -223,13 +224,11 @@ namespace ImageSharp.Tests.Drawing
{
Test("BackwardDiagonal_Transparent", Color.Blue, Brushes.BackwardDiagonal(Color.HotPink),
new Color[,] {
- { Color.Blue, Color.Blue, Color.Blue, Color.HotPink},
- { Color.Blue, Color.Blue, Color.HotPink, Color.Blue},
- { Color.Blue, Color.HotPink, Color.Blue, Color.Blue},
- { Color.HotPink, Color.Blue, Color.Blue, Color.Blue}
+ { Color.HotPink, Color.Blue, Color.Blue, Color.Blue},
+ { Color.Blue, Color.HotPink, Color.Blue, Color.Blue},
+ { Color.Blue, Color.Blue, Color.HotPink, Color.Blue},
+ { Color.Blue, Color.Blue, Color.Blue, Color.HotPink}
});
}
-
-
}
}