动画放大图片
Animated Zoom im a picture
我正在尝试在缩放图片时实现动画 - 即制作一些帧并使用计时器显示它们,这样图片似乎正在移动到缩放区域。问题是我不知道该怎么做。
这是一些代码。
if (e.getSource() == timer) {
currentFrame++;
int newImageWidth = ((mandel.getWidth() - selection.width) / frames) ;
int newImageHeight = ((mandel.getHeight() - selection.height)/frames) ;
BufferedImage resizedImage = new BufferedImage(newImageWidth , newImageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
g.scale(newImageWidth, newImageHeight);
g.drawImage(mandelImage, 0, 0, mandel.getWidth(), mandel.getHeight(), null);
g.dispose();
mandelImage = resizedImage;//mandelimage is the original picture
mandel.repaint();//the panel where is the picture
if (currentFrame >= frames) {
timer.stop();
recreate();//the final result on the zoom
}
当前图片大小的计算需要根据当前时间/动画进度。因此,如果您在计算中不使用 currentFrame
,则大小将始终相同并且您没有动画。
具体来说,您可能希望像这样随着时间的推移将图像从非常小的尺寸缩放到完整尺寸:
int newImageWidth = ((mandel.getWidth() - selection.width) * currentFrame/frames) ;
int newImageHeight = ((mandel.getHeight() - selection.height) * currentFrame/frames) ;
我正在尝试在缩放图片时实现动画 - 即制作一些帧并使用计时器显示它们,这样图片似乎正在移动到缩放区域。问题是我不知道该怎么做。 这是一些代码。
if (e.getSource() == timer) {
currentFrame++;
int newImageWidth = ((mandel.getWidth() - selection.width) / frames) ;
int newImageHeight = ((mandel.getHeight() - selection.height)/frames) ;
BufferedImage resizedImage = new BufferedImage(newImageWidth , newImageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
g.scale(newImageWidth, newImageHeight);
g.drawImage(mandelImage, 0, 0, mandel.getWidth(), mandel.getHeight(), null);
g.dispose();
mandelImage = resizedImage;//mandelimage is the original picture
mandel.repaint();//the panel where is the picture
if (currentFrame >= frames) {
timer.stop();
recreate();//the final result on the zoom
}
当前图片大小的计算需要根据当前时间/动画进度。因此,如果您在计算中不使用 currentFrame
,则大小将始终相同并且您没有动画。
具体来说,您可能希望像这样随着时间的推移将图像从非常小的尺寸缩放到完整尺寸:
int newImageWidth = ((mandel.getWidth() - selection.width) * currentFrame/frames) ;
int newImageHeight = ((mandel.getHeight() - selection.height) * currentFrame/frames) ;