Итак, я публиковал все и еще должен получить солидный ответ:Как я могу накладывать изображения друг на друга в Java?
Я создал образ, изменяющий размер, с методом обрезки. Обрезка отлично работает. Проблема, которая у меня возникает, - это цвет фона, который я указываю в функции drawImage
Graphics
, работает некорректно. Он по умолчанию является черным в качестве фона независимо от того, что я поставлю (в данном случае 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);
}
Спасибо за ответ, очень высокая оценки Насколько изолируя его странно, я удалил все, отложите вещи и только что создал новый буферизованный образ и setBackgroundColor и назначен this.OutputImage и я все еще получаю черный фон. Кроме того, просто для очистки, я использую Graphics - not Graphics2D. – 2009-03-14 19:01:04
Как выглядит новый код? Установка только цвета фона не изменит изображение - оно используется только в ясных операциях (clearRect, возможно, Graphics2D composites?). –