/**
* See ISO 18004:2006 Annex E
*/
BitMatrix BuildFunctionPattern()
{
int dimension = GetDimensionForVersion();
BitMatrix bitMatrix = new BitMatrix(dimension);
// Top left finder pattern + separator + format
bitMatrix.SetRegion(0, 0, 9, 9);
// Top right finder pattern + separator + format
bitMatrix.SetRegion(dimension - 8, 0, 8, 9);
// Bottom left finder pattern + separator + format
bitMatrix.SetRegion(0, dimension - 8, 9, 8);
// Alignment patterns
int max = alignmentPatternCenters.Length;
for (int x = 0; x < max; x++)
{
int i = alignmentPatternCenters[x] - 2;
for (int y = 0; y < max; y++)
{
if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0))
{
// No alignment patterns near the three finder paterns
continue;
}
bitMatrix.SetRegion(alignmentPatternCenters[y] - 2, i, 5, 5);
}
}
// Vertical timing pattern
bitMatrix.SetRegion(6, 9, 1, dimension - 17);
// Horizontal timing pattern
bitMatrix.SetRegion(9, 6, dimension - 17, 1);
if (versionNumber > 6)
{
// Version info, top right
bitMatrix.SetRegion(dimension - 11, 0, 3, 6);
// Version info, bottom left
bitMatrix.SetRegion(0, dimension - 11, 6, 3);
}
return(bitMatrix);
}