2010-03-15 7 views
1

У меня есть набор изображений, которые я объединяю в одну мозаику изображения, используя JAI's MosaicDescriptor.Каков наилучший способ заполнить или нарисовать изображение на Java?

Большинство изображений имеют такой же размер, но некоторые из них меньшие. Я хотел бы заполнить пробел белым цветом - по умолчанию мозаичный дескриптор использует черный цвет. Я попытался установить параметр фона double [] на {255}, и это заполняет недостающее пространство белым цветом, но оно также вводит некоторое изменение цвета в некоторые другие полноразмерные изображения.

Я открыт для любого метода - возможно, есть много способов сделать это, но документация трудно ориентироваться. Я рассматриваю возможность преобразования любых меньших изображений в BufferedImage и вызова setRGB() в пустых областях (хотя я не уверен, что использовать для сканирования в методе пакетного набораRGB()).

Мой вопрос по существу:

  • Что является лучшим способом, чтобы сделать снимок (в JAI, или BufferedImage) и заполнить/добавить отступы до определенного размера?
  • Есть ли способ выполнить это в вызове MosaicDescriptor без побочных эффектов?

Для справки, вот код, который создает мозаику:

for (int i = 0; i < images.length; i++) { 
     images[i] = JPEGDescriptor.create(new ByteArraySeekableStream(images[i]), null); 

     if (i != 0) { 
      images[i] = TranslateDescriptor.create(image, (float) (width * i), null, null, null); 
     } 
    } 

    RenderedOp finalImage = MosaicDescriptor.create(ops, MosaicDescriptor.MOSAIC_TYPE_OVERLAY, null, null, null, null, null); 

ответ

0

Чтобы ответить на часть моего вопроса, это может быть достигнуто с помощью Graphics2D и BufferedImages без использования Jai вообще:

final BufferedImage montageImage = new BufferedImage(montageSize, montageSize, BufferedImage.TYPE_INT_RGB); 

    final Graphics2D g2 = montageImage.createGraphics(); 
    g2.setPaint(Color.WHITE); 
    g2.fillRect(0, 0, montageSize, montageSize); 

    for (int i = 0; i < imageData.length; i++) { 
     final BufferedImage inputImage = ImageIO.read(new ByteArrayInputStream(imageData[i])); 
     g2.drawImage(inputImage, i * size, 0, null); 
    } 

    g2.dispose(); 

По существу, изображение создается из желаемого полного размера и заполняется белым. Затем меньшее изображение (изображения) рисуется в правильном месте (точках).