【发布时间】:2017-01-11 01:39:10
【问题描述】:
我正在尝试调整我的 BufferedImage(我的绘图区域)的大小,而不会丢失图像上绘制的图形并在调整大小后恢复绘制。(就像在 Paint .NET)我正在使用 JSplitPane 从边缘执行此操作并且它正在发生,但是当我想继续绘制时,光标(笔)距离绘制的图形(形状)大约 3 厘米,因为数字与图像一起成长。当我删除整个图片时,它会变得更好。 和
我查看了 Google 和 StackoverFlow 中的答案,但它对我不起作用。我该如何解决这个问题?
到目前为止我尝试过这样的:
类用户界面
jSplitPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, (PropertyChangeEvent evt) -> {
double imageHeight = jSplitPane.getDividerLocation();
double imageWidth = imageHeight * 1.6;
top.setDividerLocation((int) imageWidth);
drawGround.changeImageSizeDynmcally((int) imageWidth, (int) imageHeight);
drawGround.repaint();
});
类 DrawGround
BufferedImage masterImage = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
//image is master image drawing at first time.
public void changeImageSizeDynmcally(int w, int h) {
AREA_WIDTH = w;
AREA_HEIGHT = h;
repaint();
BufferedImage scaledImage = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2D = scaledImage.createGraphics();
g2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2D.drawImage(masterImage, 0, 0, null);
g2D.dispose();
}
在这个方法之后我有
`@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (masterImage != null) {
g2D = (Graphics2D) masterImage.getGraphics();
g2D.setComposite(AlphaComposite.Src);
bla,bla,bla`
【问题讨论】:
-
新建一个你想要大小的
BufferedImage,将原来的BufferedImage绘制到它上面(即Graphics#drawImage),分配新的BufferedImage指向旧的... -
你永远不会将
scaledImage分配给任何东西,所以masterImage(现在是旧的)仍然被使用 -
@MadProgrammer 谢谢你的回答,你是对的,现在我会试着通知你。
-
@MadProgrammer 用新的缩放图像更改主图像我需要创建返回 BufferedImage 的新方法。因为在我的方法中它是直接绘图。
-
为什么不在方法中将
scaledImage分配给masterImage(并触发重绘)...masterImage = scaledImage;
标签: java graphics bufferedimage