List<CoursePage> BandPageToLimitBitmapSize(CoursePage page, float dpi, long maxPixels)
{
List<CoursePage> list = new List<CoursePage>();
bool landscape = page.landscape;
// Figure out how many bands we need to limit the pixel size of each band.
long pixelsOnPage = (long) Math.Round(page.printRectangle.Width * dpi / 100F) * (long) Math.Round(page.printRectangle.Height * dpi / 100F);
int numBands = (int) Math.Ceiling((double)pixelsOnPage / (double) maxPixels);
// Calculate the band size.
float mapBandSize, printBandSize;
if (landscape) {
mapBandSize = page.mapRectangle.Width / numBands;
printBandSize = page.printRectangle.Width / numBands;
}
else {
mapBandSize = page.mapRectangle.Height / numBands;
printBandSize = page.printRectangle.Height / numBands;
}
// Create the bands.
for (int i = 0; i < numBands; ++i) {
CoursePage band = new CoursePage();
band.landscape = landscape;
band.courseDesignator = page.courseDesignator;
if (landscape) {
band.mapRectangle = new RectangleF(page.mapRectangle.Left + i * mapBandSize, page.mapRectangle.Top, mapBandSize, page.mapRectangle.Height);
band.printRectangle = new RectangleF(page.printRectangle.Left + i * printBandSize, page.printRectangle.Top, printBandSize, page.printRectangle.Height);
}
else {
band.mapRectangle = new RectangleF(page.mapRectangle.Left, page.mapRectangle.Top + (numBands - 1 - i) * mapBandSize, page.mapRectangle.Width, mapBandSize);
band.printRectangle = new RectangleF(page.printRectangle.Left, page.printRectangle.Top + i * printBandSize, page.printRectangle.Width, printBandSize);
}
list.Add(band);
}
// Return the list of bands.
return list;
}