2013-02-18 1 views
1

[ng 파일의 dpi를 설정하려면 다음 코드를 사용하고 있습니다. 나는 예외 생성이 코드의 첫 번째 줄 이해 드릴 수 없습니다 only..But이 코드는이 사이트의 스레드 중 하나에 표시됩니다 :자바에서 png 이미지의 DPI를 설정하십시오.

static BufferedImage gridImage; 
.... 

private static void saveGridImage(File output) throws IOException { 
output.delete(); 

final String formatName = "png"; 

for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext();) { 
    ImageWriter writer = iw.next(); 
    ImageWriteParam writeParam = writer.getDefaultWriteParam(); 
    ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB); 
    IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam); 
    if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) { 
     continue; 
    } 

    setDPI(metadata); 

    final ImageOutputStream stream = ImageIO.createImageOutputStream(output); 
    try { 
     writer.setOutput(stream); 
     writer.write(metadata, new IIOImage(gridImage, null, metadata), writeParam); 
    } finally { 
     stream.close(); 
    } 
    break; 
} 
} 

private static void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException { 

// for PMG, it's dots per millimeter 
double dotsPerMilli = 1.0 * 300/10/2.54; 

IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize"); 
horiz.setAttribute("value", Double.toString(dotsPerMilli)); 

IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize"); 
vert.setAttribute("value", Double.toString(dotsPerMilli)); 

IIOMetadataNode dim = new IIOMetadataNode("Dimension"); 
dim.appendChild(horiz); 
dim.appendChild(vert); 

IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0"); 
root.appendChild(dim); 

metadata.mergeTree("javax_imageio_1.0", root); 
} 

예외입니다 :

java.lang.IllegalArgumentException: image == null! 

도와주세요 Java에 익숙하지 않기 때문에 알아낼 수 있습니다.

+0

예외가 발생하는 곳 (메서드, 줄)을 확인해야합니다. 이 줄의 – leonbloy

+0

writer.write (메타 데이터, 새 IIOImage (gridImage, null, 메타 데이터), writeParam); – rupareliab

+0

'1.0 * 300/10/2.54 == 300/25.4' – krispy

답변

0

gridImagenew IIOImage(gridImage, null, metadata)이라는 필드를 null로 지정하면 필드가 할당되지 않은 것 같습니다.

+0

bufferedimage 객체에 할당하는 방법을 알려 주시겠습니까?이 것은 어리석은 질문 일 수 있지만 새로운 것입니다 ... 미리 감사드립니다. – rupareliab

+0

미안 해요,하지만 당신이 어디에서 이미지를 가져 오기로되어 있는지 모르겠습니다. '정적 BufferedImage gridImage;는 어떨까요? 그 "gridImage"란 무엇입니까? 초보자 인 경우 간단한 것을 사용해보십시오 (단지 PNG로 작성하고 DPI는 잊어 버리십시오). 또한, Eclipse와 같은 IDE를 사용하여 디버깅하는 방법을 배우고 진행 상황을 이해할 수 있도록 스테핑하는 방법을 배워야합니다. – leonbloy

관련 문제