1 58 package org.krysalis.barcode.output.bitmap; 59 60 import java.awt.Color ; 61 import java.awt.Graphics2D ; 62 import java.awt.RenderingHints ; 63 import java.awt.image.BufferedImage ; 64 import java.io.IOException ; 65 import java.io.OutputStream ; 66 67 import org.krysalis.barcode.BarcodeDimension; 68 import org.krysalis.barcode.BarcodeGenerator; 69 import org.krysalis.barcode.output.java2d.Java2DCanvasProvider; 70 import org.krysalis.barcode.tools.UnitConv; 71 72 77 public class BitmapBuilder { 78 79 82 protected BitmapBuilder() { 83 throw new UnsupportedOperationException (); 84 } 85 86 93 public static BufferedImage prepareImage(BarcodeDimension dim, 94 int resolution, int imageType) { 95 int bmw = UnitConv.mm2px(dim.getWidthPlusQuiet(), resolution); 96 int bmh = UnitConv.mm2px(dim.getHeightPlusQuiet(), resolution); 97 BufferedImage bi = new BufferedImage ( 98 bmw, 99 bmh, 100 imageType); 101 return bi; 102 } 103 104 112 public static Graphics2D prepareGraphics2D(BufferedImage image, 113 BarcodeDimension dim, boolean antiAlias) { 114 Graphics2D g2d = image.createGraphics(); 115 if (antiAlias) { 116 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 117 RenderingHints.VALUE_ANTIALIAS_ON); 118 } 119 g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 120 RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 121 g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 122 RenderingHints.VALUE_FRACTIONALMETRICS_ON); 123 g2d.setBackground(Color.white); 124 g2d.setColor(Color.black); 125 g2d.clearRect(0, 0, image.getWidth(), image.getHeight()); 126 g2d.scale(image.getWidth() / dim.getWidthPlusQuiet(), 127 image.getHeight() / dim.getHeightPlusQuiet()); 128 return g2d; 129 } 130 131 138 public static BufferedImage getImage(BarcodeGenerator bargen, String msg, int resolution) { 139 BarcodeDimension dim = bargen.calcDimensions(msg); 140 BufferedImage bi = prepareImage(dim, resolution, BufferedImage.TYPE_BYTE_GRAY); 141 Graphics2D g2d = prepareGraphics2D(bi, dim, true); 142 Java2DCanvasProvider provider = new Java2DCanvasProvider(g2d); 143 bargen.generateBarcode(provider, msg); 144 bi.flush(); 145 return bi; 146 } 147 148 158 public static void saveImage(BufferedImage image, 159 OutputStream out, String mime, int resolution) throws IOException { 160 BitmapEncoder encoder = BitmapEncoderRegistry.getInstance(mime); 161 166 encoder.encode(image, out, mime, resolution); 167 } 168 169 178 public static void outputBarcodeImage(BarcodeGenerator bargen, 179 String msg, 180 OutputStream out, 181 String mime, 182 int resolution) 183 throws IOException { 184 BufferedImage image = getImage(bargen, msg, resolution); 185 saveImage(image, out, mime, resolution); 186 } 187 188 } 189 | Popular Tags |