java - Graphics2D 在保存文件前旋转
问题描述
我用 g2d 创建了这个图像:
这是代码:
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° anticlok,使蓝色方块出现在左下方:
所以我添加了这个:
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();
}
解决方案
转换应该在您希望受到它们影响的任何操作之前应用,转换不会影响在它之前完成的任何操作......
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
. 将“正常”内容渲染到第一个,然后使用第二个来绘制第一个,但是使用旋转变换......因为变换让我头疼
使用您的代码绘制黑色图像
您可能需要提供一个可以围绕其旋转图像的锚点,否则它将被评为左上角
你会原谅我的,但这种想法以前不是没有被问过的
推荐阅读
- java - 如何将时间单位从秒更改为天/月/年
- ruby-on-rails - 按属性的子字符串(时间)对记录进行排序
- android - Webview - Android App - 测试以查看是否在 Android App 而不是 Android Chrome
- bash - bash 为终端输出添加颜色
- jersey - 泽西阅读 zipinputstream
- spring - 在 Spring Boot 上使用 OAuth2 保护特定资源 id
- node.js - 无法让 Apache 反向代理我的 node.js 应用程序 (https)
- https - Couchdb ssl 未侦听端口 6984
- python - 使用瞻博网络 PyEZ 加载配置文件
- r - R:如何根据另一个变量一起发现的频率创建组?