【问题标题】:What's the best way to fill or paint around an image in Java?在 Java 中填充或绘制图像的最佳方法是什么?
【发布时间】:2010-03-15 20:53:24
【问题描述】:

我有一组图像,我使用JAIMosaicDescriptor 将它们组合成一个图像马赛克。

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

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

我的问题本质上是:

  • 拍摄图像(在 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);

【问题讨论】:

    标签: java image bufferedimage jai mosaic


    【解决方案1】:

    要回答我的部分问题,这可以通过 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();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2012-11-18
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多