2013-02-10 2 views
2

Я использую порт Java ImageMagick под названием JMagick. Мне нужно иметь возможность создавать новое изображение и записывать в него произвольный фрагмент текста. Документы очень плохие и что мне удалось получить далека заключается в том, чтобы писать текст в изображение, которое исходит от IO.Also, во всех примерах, которые я нашел, это похоже на первую операцию, прежде чем записывать новые данные изображения, всегда загружает существующее изображение в экземпляр ImageInfo. Как я могу создать изображение с нуля с помощью JMagick, а затем написать в него текст?Создать изображение с нуля с помощью JMagick

Вот что я делаю сейчас:

try { 

     ImageInfo info = new ImageInfo(); 
     info.setSize("512x512"); 
     info.setUnits(ResolutionType.PixelsPerInchResolution); 
     info.setColorspace(ColorspaceType.RGBColorspace); 
     info.setBorderColor(PixelPacket.queryColorDatabase("red")); 
     info.setDepth(8); 
     BufferedImage img = new BufferedImage(512,512,BufferedImage.TYPE_4BYTE_ABGR); 
     byte[] imageBytes = ((DataBufferByte) img.getData().getDataBuffer()).getData(); 
     MagickImage mimage = new MagickImage(info,imageBytes); 

     DrawInfo aInfo = new DrawInfo(info); 
     aInfo.setFill(PixelPacket.queryColorDatabase("green")); 
     aInfo.setUnderColor(PixelPacket.queryColorDatabase("yellow")); 
     aInfo.setOpacity(0); 
     aInfo.setPointsize(36); 
     aInfo.setFont("Arial"); 
     aInfo.setTextAntialias(true); 

     aInfo.setText("JMagick Tutorial"); 
     aInfo.setGeometry("+40+40"); 

     mimage.annotateImage(aInfo); 

     mimage.setFileName("text.jpg"); 
     mimage.writeImage(info); 


    } catch (MagickException ex) { 
     Logger.getLogger(LWJGL_IDOMOO_SIMPLE_TEST.class.getName()).log(Level.SEVERE, null, ex); 
    } 

Это не работает, виртуальная машина врезается с нарушением доступа, как это, вероятно, ожидает входного изображения от IO.

+0

Вы наконец решили эту проблему? – jarandaf

+0

Нет. Я оставил его. Переведено на C++ –

ответ

1

Я понимаю, что может быть слишком поздно для ответа. Здесь я написал этот простой код, чтобы создать сценарий того, что вы просили.!

private void createEmptyImage() throws MagickException{ 
    ImageInfo newImageiInfo=new ImageInfo(); 
    newImageiInfo.setFileName("src\\main\\resources\\test.jpg"); 
    newImageiInfo.setSize("512x512"); 
    newImageiInfo.setUnits(ResolutionType.PixelsPerInchResolution); 
    newImageiInfo.setColorspace(ColorspaceType.RGBColorspace); 
    newImageiInfo.setBorderColor(PixelPacket.queryColorDatabase("red")); 
    newImageiInfo.setDepth(8); 

    MagickImage addTextImage = new MagickImage(); 
    addTextImage.allocateImage(newImageiInfo); 
    addTextImage.setYResolution(480); 
    addTextImage.setXResolution(640); 
    addTextImage.writeImage(newImageiInfo); 


    DrawInfo aInfo = new DrawInfo(newImageiInfo); 

    aInfo.setFill(PixelPacket.queryColorDatabase("green")); 
    aInfo.setUnderColor(PixelPacket.queryColorDatabase("yellow")); 
    aInfo.setOpacity(0); 
    aInfo.setPointsize(36); 
    aInfo.setFont("Arial"); 
    aInfo.setTextAntialias(true); 
    aInfo.setText("JMagick Tutorial"); 
    aInfo.setGeometry("+50+50"); 

    addTextImage.annotateImage(aInfo); 
    addTextImage.setFileName("src\\main\\resources\\test-result.jpg"); 
    addTextImage.writeImage(newImageiInfo); 
}