2013-04-24 1 views
3

У меня есть куча .jpg изображений, и я хочу напечатать их (на бумаге с чернилами) с фиксированным размером (в см). Предположим, что image1.png - 400x600 пикселей, и я хочу напечатать его с разрешением 300 dpi. Я пробовал использовать PrinterJob и Printable, но, похоже, я не могу указать DPI. Вот фрагменты кода:Java - набор DPI для печати изображения

PrinterJob job = PrinterJob.getPrinterJob(); 

job.setPrintable(new PrintableDeck(cardDB)); 

PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); 
attr.add(new PrinterResolution(300, 300, PrinterResolution.DPI)); 
attr.add(new MediaPrintableArea(8,21,210-16,296-42,MediaPrintableArea.MM)); 
attr.add(MediaSizeName.ISO_A4); 
attr.add(new Copies(1)); 
attr.add(OrientationRequested.PORTRAIT); 
attr.add(PrintQuality.HIGH); 
//attr.add(Fidelity.FIDELITY_TRUE); 

job.print(attr); 

и

public class PrintableDeck implements Printable { 

    BufferedImage image; 

    public PrintableDeck(DB cardDB){ 
     // This load an image into 'image'    
     BufferedImage image = cardDB.getCard(5462).getBufferedImage(); 
    } 

    public int print(Graphics graphics, PageFormat pf, int page) 
    throws PrinterException{ 

     if(page>0){ 
      return NO_SUCH_PAGE; 
     } 

     Graphics2D g2 = (Graphics2D) graphics; 
     g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
     g2.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY); 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 

     double pageHeight = pf.getImageableHeight(); 
     double pageWidth = pf.getImageableWidth(); 

     // This print ONLY ~596x842, as if page is 72 DPI 
     System.out.println("Imageable WH: "+pageWidth+" x "+pageHeight); 

     // This print correctly 400x600 
     System.out.println("Image: "+images.get(0).getWidth(null)+" x "+images.get(0).getHeight(null)); 

     g2.drawImage(image, 0, 0, null); 
     g2.dispose(); 


     return PAGE_EXISTS; 
    } 
} 

Как вы можете видеть выше, у меня есть PageFormat.getImageableHeight() ~ 842 и PageFormat.getImageableWidth() ~ 595. Если страница будет 300 DPI, я ожидал, что эти значения будут намного выше, около 3000 x 2500. Что мне не хватает?

Большое вам спасибо.

ответ

0

вот мой код, примечание Я использую Scalr.

private String autoResizeImage(String image, int width, int dpi, String prefix) throws IllegalArgumentException, ImagingOpException, IOException { 

    File file = new File(image); 

    BufferedImage img = ImageIO.read(file); 


    BufferedImage result = Scalr.resize(img, Scalr.Method.SPEED, Scalr.Mode.FIT_TO_WIDTH, width, Scalr.OP_ANTIALIAS); 


    File outputfile = new File(prefix); 
    PNGEncodeParam penc = PNGEncodeParam.getDefaultEncodeParam(result); 

    double meter2inchRatio = 1d/0.0254d; 
    int dim = (int) (dpi * meter2inchRatio) + 1; 
    penc.setPhysicalDimension(dim, dim, 1); 

    // resize orginal image 
    JAI.create("filestore", result, outputfile.getAbsolutePath(), "PNG", penc); 

    return outputfile.getAbsolutePath(); 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^