【发布时间】:2022-06-29 01:17:21
【问题描述】:
我显然在这里遗漏了一些东西。我正在尝试从原始图像中切出一个切片,将剩余的较大部分移到左侧,然后将切出的切片附加到右侧。选框样式。
在附加图像中,原始图像位于顶部,而 drawImage 函数生成的 BufferedImage 位于底部。
这行得通:
try {
originalImage = ImageIO.read(new File("c:\\temp\\scanner.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
int sliceSize = 23;
scrolledImage = new BufferedImage(originalImage.getWidth(),originalImage.getHeight(),BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = scrolledImage.createGraphics();
leftSlice = new BufferedImage(originalImage.getWidth(),originalImage.getHeight(),BufferedImage.TYPE_INT_ARGB);
leftSlice = originalImage.getSubimage(0,0,sliceSize,originalImage.getHeight());
g2.drawImage(leftSlice,originalImage.getWidth() - sliceSize,0,sliceSize,originalImage.getHeight(),null);
rightSlice = new BufferedImage(originalImage.getWidth(),originalImage.getHeight(),BufferedImage.TYPE_INT_ARGB);
rightSlice = originalImage.getSubimage(sliceSize,0,originalImage.getWidth() - sliceSize,originalImage.getHeight());
g2.drawImage(rightSlice,0,0,originalImage.getWidth() - sliceSize,originalImage.getHeight(),null);
g2.dispose();
尝试使用右切片附加到左切片不起作用:
leftSlice = new BufferedImage(originalImage.getWidth(),originalImage.getHeight(),BufferedImage.TYPE_INT_ARGB);
leftSlice = originalImage.getSubimage(0,0,sliceSize,originalImage.getHeight());
Graphics2D left2D = leftSlice.createGraphics();
rightSlice = new BufferedImage(originalImage.getWidth(),originalImage.getHeight(),BufferedImage.TYPE_INT_ARGB);
rightSlice = originalImage.getSubimage(sliceSize,0,originalImage.getWidth() - sliceSize,originalImage.getHeight());
left2D.drawImage(rightSlice,0,0,originalImage.getWidth() - sliceSize,originalImage.getHeight(),null);
left2D.dispose();
所以..它似乎覆盖了原始图像。当我隐式创建一个新的 BufferedImage(和 createGraphics)然后指示它重写新的时,这怎么可能呢?我怀疑关于 getSubimage 的一些事情......
我只是想消除对额外步骤和缓冲图像的需求,因为此代码将在许多地方用于小型动画元素。
【问题讨论】:
标签: java awt bufferedimage