坛里看到, 备忘一下
这里用到第三方库, 主要是做高斯模糊用的,
import com.jhlabs.image.GaussianFilter;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
*
* @date 05/02/2013
*/
public class Demo extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Test");
f.setContentPane(new Demo());
f.pack();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
private BufferedImage image;
private Image small;
private Point loc;
private int halfScaledSize;
Demo() {
try {
image = ImageIO.read(getClass().getResourceAsStream("2.png"));
small = image.getScaledInstance(image.getWidth() / 2, image.getHeight() / 2, Image.SCALE_SMOOTH);
halfScaledSize = small.getWidth(this) / 8;
loc = new Point(0, 0);
} catch (Exception e) {
throw new RuntimeException(e);
}
setPreferredSize(new Dimension(small.getWidth(this), small.getHeight(this)));
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
loc.x = e.getX();
loc.y = e.getY();
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(small, 0, 0, this);
int x = loc.x - halfScaledSize;
int y = loc.y - halfScaledSize;
int size = halfScaledSize * 2;
//绘制阴影
//BufferedImage shadow = getShadow(Color.BLACK, size + 6, 6);
//g.drawImage(shadow, x + 3, y + 3, this);
//抗锯齿
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//画白边(大一点的白背景)
g.setColor(Color.white);
g.fillRoundRect(x, y, size + 6, size + 6, size + 6, size + 6);
//画圆角图像
g.drawImage(getRenderedImage(image, loc.x * 2, loc.y * 2, size),
x + 3, y + 3, this);
}
private BufferedImage getShadow(Color c, int size, int blur) {
int fix = blur / 2;
BufferedImage result = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = result.createGraphics();
g.setClip(new RoundRectangle2D.Double(fix, fix, size - blur, size - blur, size - blur, size - blur));
g.setColor(c);
g.fillRect(0, 0, result.getWidth(), result.getHeight());
g.dispose();
//GaussianFilter filter = new GaussianFilter(blur);
//result = filter.filter(result, result);
return result;
}
private BufferedImage getRenderedImage(
BufferedImage img, int x, int y, int size) {
BufferedImage result = new BufferedImage(
size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = result.createGraphics();
g.translate(-x, -y);
g.drawImage(img, 0, 0, null);
g.translate(x, y);
RoundRectangle2D round = new RoundRectangle2D.Double(0, 0, size, size, size, size);
Area clear = new Area(new Rectangle(0, 0, size, size));
clear.subtract(new Area(round));
g.setComposite(AlphaComposite.Clear);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.fill(clear);
g.dispose();
return result;
}
}
分享到:
相关推荐
综上所述,"局部放大,放大镜效果"的实现涉及到Java图形编程、事件处理、图像处理等多个核心技术点,这些知识对于开发交互式用户界面是非常重要的。通过理解这些原理,开发者可以创建更直观、更具吸引力的用户体验。
以下是实现Java放大镜效果的一些关键知识点: 1. **Swing或JavaFX**: 这两个是Java提供的主要GUI工具包。Swing是Java AWT的扩展,而JavaFX提供更现代、功能更丰富的UI组件和动画效果。在这个项目中,开发者可能使用...
在Java编程领域,实现放大镜效果是一项常见的任务,特别是在开发图形用户界面(GUI)或图像处理软件时。这个效果能够帮助用户在查看细节时获得更清晰的视觉体验,尤其是在查看小字体或者细微图像时。本项目提供的...
"Java 放大镜.rar" 提供的正是这样一种功能,它是一个简单的Java桌面应用程序,能够帮助用户放大屏幕上的内容。尽管由于缺少调试环境,我们无法立即验证其实际效果,但从提供的四个Java代码文件中,我们可以探讨一些...
在Java编程中,实现放大镜效果是一项常见的任务,特别是在开发图形用户界面(GUI)应用程序时。这个主题主要涉及Java的图形绘制和事件处理技术。在提供的压缩包"Java实现的放大镜效果附有源文件.zip"中,可能包含了...
总结,实现Java中的放大镜效果涉及了图形绘制、坐标变换、放大变换以及事件监听等多个技术点。通过理解和应用这些知识,我们可以创建出一个既实用又有视觉吸引力的GUI组件,提升用户的交互体验。在实际项目中,这样...
通过以上步骤,我们可以构建一个基本的Java放大镜应用。当然,实际项目中可能需要考虑更多的细节,例如平滑缩放、性能优化、交互设计等。对于初学者,可以参考相关的Java GUI教程或示例代码来理解和实现这个功能。在...
在Java中实现放大镜效果,我们通常会用到`java.awt.image.BufferedImage`类来处理图像,`java.awt.Graphics2D`类来绘制图像,以及可能用到`java.awt.geom.AffineTransform`类来实现缩放变换。 1. **BufferedImage与...
Java编写的桌面放大镜是一种实用工具,它利用Java编程语言的特性实现了一个可以在用户界面(UI)上提供放大效果的应用程序。这样的工具对于查看屏幕上细小的文字或图像非常有帮助,尤其是在设计、编程或者阅读时。...
基于java的开发源码-实现的放大镜效果附有源文件.zip 基于java的开发源码-实现的放大镜效果附有源文件.zip 基于java的开发源码-实现的放大镜效果附有源文件.zip 基于java的开发源码-实现的放大镜效果附有源文件.zip ...
为了让放大镜窗口看起来更像一个真正的放大镜,开发者可能会使用Java的AlphaComposite类来设置窗口的透明度,以及Shape和Graphics2D类来绘制非矩形窗口形状,如圆形或椭圆形,以模拟放大镜的透镜效果。 7. **性能...
这个程序的源代码可能是用Java Swing或JavaFX库来实现的,这两种库都允许开发者构建丰富的图形组件,包括模拟放大镜效果。 在Java Swing中,可以使用JFrame作为主窗口,然后添加组件,如JPanel或JLabel,来显示图像...
5. **透明效果**:为了让放大镜窗口看起来更自然,可能还需要实现半透明效果。这可以通过设置窗口的透明度属性来实现。 6. **多线程**:为了保持界面的响应性,图像的捕获和处理工作可能需要在后台线程进行,避免...
通过以上技术的综合运用,我们可以构建出一个功能完善的Java放大镜工具,它不仅能帮助用户查看屏幕上的细微部分,还能通过任务栏图标进行快速访问,提供自定义的大小调整和流畅的自动滑动功能。这样的工具对于设计师...
在本资源中,我们关注的是一个使用Java编程语言实现的放大镜效果。放大镜效果通常在图形用户界面(GUI)应用程序中用于提供一种增强用户体验的功能,让用户能够更清晰地查看屏幕上某一区域的细节。这个Java源码项目...
在Java编程语言中,实现放大镜效果是一种常见的GUI(图形用户界面)开发技术,它可以为用户提供更加直观的视觉体验,特别是在处理图像或者查看细节时。本项目提供的"基于java的实现的放大镜效果附有源文件.zip"包含...
JAVA源码Java实现的放大镜效果附有源文件
【商城购物车图片放大镜效果】是一种常见的电商网站交互设计,它允许用户在不离开页面的情况下,查看商品图片的详细细节。这种效果通常通过JavaScript、CSS3等前端技术实现,可以提升用户的购物体验,帮助他们更准确...
在Java编程语言中,实现放大镜效果是一种常见的图形用户界面(GUI)开发任务,它可以用于增强用户对图像细节的观察体验。在这个项目中,我们将会探讨如何利用Java的AWT和Swing库来创建这样的功能,并结合源代码进行...