gpt4 book ai didi

java - 如何在 Java 中将图像相互叠加?

转载 作者:行者123 更新时间:2023-11-30 09:58:41 51 4
gpt4 key购买 nike

所以我一直在发帖,还没有得到一个可靠的答案:

我创建了一个图像大小调整类,带有裁剪方法。裁剪效果很好。我遇到的问题是我在 GraphicsdrawImage 函数中指定的背景颜色无法正常工作。无论我提供什么,它都默认为黑色背景(在本例中为 Color.WHITE)。

此外,叠加图像或最上面的图像(来自文件)正在倒置(我认为是)或以其他方式变色。只是为了让您更好地概念化这一点,我正在使用 jpeg 并将其覆盖在新的 BufferedImage 之上,新的缓冲图像的背景未设置。下面是我正在使用的代码:

public void Crop(int Height, int Width, int SourceX, int SourceY) throws Exception {
//output height and width
int OutputWidth = this.OutputImage.getWidth();
int OutputHeight = this.OutputImage.getHeight();

//create output streams
ByteArrayOutputStream MyByteArrayOutputStream = new ByteArrayOutputStream();
MemoryCacheImageOutputStream MyMemoryCacheImageOutputStream = new MemoryCacheImageOutputStream(MyByteArrayOutputStream);

//Create a new BufferedImage
BufferedImage NewImage = new BufferedImage(Width, Height, BufferedImage.TYPE_INT_RGB);
Graphics MyGraphics = NewImage.createGraphics();

MyGraphics.drawImage(this.OutputImage, -SourceX, -SourceY, OutputWidth, OutputHeight, Color.WHITE, null);

// Get Writer and set compression
Iterator MyIterator = ImageIO.getImageWritersByFormatName("png");
if (MyIterator.hasNext()) {
//get image writer
ImageWriter MyImageWriter = (ImageWriter)MyIterator.next();

//get params
ImageWriteParam MyImageWriteParam = MyImageWriter.getDefaultWriteParam();

//set outputstream
MyImageWriter.setOutput(MyMemoryCacheImageOutputStream);

//create new ioimage
IIOImage MyIIOImage = new IIOImage(NewImage, null, null);

//write new image
MyImageWriter.write(null, MyIIOImage, MyImageWriteParam);
}

//convert output stream back to inputstream
ByteArrayInputStream MyByteArrayInputStream = new ByteArrayInputStream(MyByteArrayOutputStream.toByteArray());
MemoryCacheImageInputStream MyMemoryCacheImageInputStream = new MemoryCacheImageInputStream(MyByteArrayInputStream);

//resassign as a buffered image
this.OutputImage = ImageIO.read(MyMemoryCacheImageInputStream);
}

最佳答案

您能否区分是 Graphics 方法还是 ImageIO 方法破坏了您的图像?看起来你可以通过短路整个 ImageIO 进程并简单地分配来测试它

this.OutputImage = NewImage;

就此而言,我假设 ImageIO 操作有一些好处?在编写示例时,它似乎(理想情况下)是空操作。

此外,在开始 ImageIO 过程之前,您不要处置 Graphics2D。它通常不会产生任何影响,但您不想这样假设。

关于java - 如何在 Java 中将图像相互叠加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644919/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com