在Java中填充或绘制图像的最佳方法是什么?

时间:2010-03-15 20:53:25

标签: java image bufferedimage jai mosaic

我有一组图像,我使用JAIMosaicDescriptor合并为单个图像拼接。

大多数图像大小相同,但有些图像较小。我想用白色填充缺失的空间 - 默认情况下,MosaicDescriptor使用黑色。我尝试将double []背景参数设置为{255},并用白色填充缺失的空间,但它也会在其他一些全尺寸图像中引入一些变色。

我对任何方法持开放态度 - 可能有很多方法可以做到这一点,但文档很难导航。我正在考虑将任何较小的图像转换为BufferedImage并在空白区域调用setRGB()(尽管我不确定批量setRGB()方法中的scanize用什么)。

我的问题基本上是:

  • 获取图像(在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);

1 个答案:

答案 0 :(得分: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();

基本上,图像是按照所需的全尺寸创建的,并用白色填充。然后将较小的图像绘制在正确的位置。