// Once arranging is complete, copies each glyph to its chosen position in the single larger output bitmap. static Bitmap CopyGlyphsToOutput(List <ArrangedGlyph> glyphs, int width, int height) { Bitmap output = new Bitmap(width, height, PixelFormat.Format32bppArgb); int usedPixels = 0; foreach (ArrangedGlyph glyph in glyphs) { Glyph sourceGlyph = glyph.Source; Rectangle sourceRegion = sourceGlyph.Subrect; Rectangle destinationRegion = new Rectangle(glyph.X + 1, glyph.Y + 1, sourceRegion.Width, sourceRegion.Height); BitmapUtils.CopyRect(sourceGlyph.Bitmap, sourceRegion, output, destinationRegion); BitmapUtils.PadBorderPixels(output, destinationRegion); sourceGlyph.Bitmap = output; sourceGlyph.Subrect = destinationRegion; usedPixels += (glyph.Width * glyph.Height); } float utilization = ((float)usedPixels / (float)(width * height)) * 100; Console.WriteLine("Packing efficiency {0}%", utilization); return(output); }
// Once arranging is complete, copies each glyph to its chosen position in the single larger output bitmap. static Bitmap CopyGlyphsToOutput(List <ArrangedGlyph> glyphs, int width, int height) { Bitmap output = new Bitmap(width, height, PixelFormat.Format32bppArgb); foreach (ArrangedGlyph glyph in glyphs) { Glyph sourceGlyph = glyph.Source; Rectangle sourceRegion = sourceGlyph.Subrect; Rectangle destinationRegion = new Rectangle(glyph.X + 1, glyph.Y + 1, sourceRegion.Width, sourceRegion.Height); BitmapUtils.CopyRect(sourceGlyph.Bitmap, sourceRegion, output, destinationRegion); BitmapUtils.PadBorderPixels(output, destinationRegion); sourceGlyph.Bitmap = output; sourceGlyph.Subrect = destinationRegion; } return(output); }