Graphics2D вращается перед сохранением файла - PullRequest
0 голосов
/ 09 января 2019

Я создаю это изображение с помощью g2d:

enter image description here

Вот код:

BufferedImage bufferedImage = new BufferedImage(408, 408, BufferedImage.TYPE_INT_RGB);    
Graphics2D g2d = bufferedImage.createGraphics();
List<Pixel> pixels = cacheRepo.findAll();
pixels.stream().forEach(pixel -> {
    g2d.setColor(getColorFromPixel(pixel));
    g2d.fillRect(getPos(pixel.getPosition().x), getPos(pixel.getPosition().y), 20, 20);
});

Теперь я пытаюсь повернуть его на 90 °, чтобы в левом нижнем углу появился квадрат блю:

enter image description here

Итак, я добавляю это:

g2d.rotate(Math.toRadians(90));
g2d.drawRenderedImage(bufferedImage, null);

Но вращение не происходит (у меня все еще то же изображение).

Вот полный фрагмент кода с частью, которая сохраняет изображение:

 // Constructs a BufferedImage of one of the predefined image types.
    BufferedImage bufferedImage = new BufferedImage(408, 408, BufferedImage.TYPE_INT_RGB);
    // Create a graphics which can be used to draw into the buffered image
    Graphics2D g2d = bufferedImage.createGraphics();
    List<Pixel> pixels = cacheRepo.findAll();
    pixels.stream().forEach(pixel -> {
        g2d.setColor(getColorFromPixel(pixel));
        g2d.fillRect(getPos(pixel.getPosition().x), getPos(pixel.getPosition().y), 20, 20);
    });
    g2d.rotate(Math.toRadians(90));
    g2d.drawRenderedImage(bufferedImage, null);
    g2d.dispose();
    // Save as PNG
    File file = new File("myimage.png");
    try {
        ImageIO.write(bufferedImage, "png", file);
    } catch (IOException e) {
        e.printStackTrace();
    }

1 Ответ

0 голосов
/ 09 января 2019

Преобразования должны применяться ПЕРЕД любыми операциями, которые вы хотите, чтобы они выполнялись, преобразования не повлияют на все, что было сделано до этого ...

BufferedImage bufferedImage = new BufferedImage(408, 408, BufferedImage.TYPE_INT_RGB);
// Create a graphics which can be used to draw into the buffered image
Graphics2D g2d = bufferedImage.createGraphics();
g2d.rotate(Math.toRadians(90));
List<Pixel> pixels = cacheRepo.findAll();
pixels.stream().forEach(pixel -> {
    g2d.setColor(getColorFromPixel(pixel));
    g2d.fillRect(getPos(pixel.getPosition().x), getPos(pixel.getPosition().y), 20, 20);
});
//g2d.rotate(Math.toRadians(90));
// Not sure what you're hoping to achieve here
//g2d.drawRenderedImage(bufferedImage, null);
g2d.dispose();

Если вы предпочитаете, используйте два BufferedImages. Визуализируйте «нормальное» содержимое первым, затем используйте второе, чтобы нарисовать первое, но с преобразованием вращения ... потому что преобразования делают мою голову в ?

используя ваш код нарисуйте черное изображение

Возможно, вам потребуется указать точку привязки, вокруг которой изображение можно повернуть, в противном случае оно будет оцениваться в верхнем / левом углу

И вы меня простите, но такого рода мысли раньше не задавались

...