`
sanshizi
  • 浏览: 85989 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 放大镜效果

    博客分类:
  • Java
阅读更多
坛里看到, 备忘一下
这里用到第三方库, 主要是做高斯模糊用的,


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实现的放大镜效果附有源文件.7z

    以下是实现Java放大镜效果的一些关键知识点: 1. **Swing或JavaFX**: 这两个是Java提供的主要GUI工具包。Swing是Java AWT的扩展,而JavaFX提供更现代、功能更丰富的UI组件和动画效果。在这个项目中,开发者可能使用...

    Java实现的放大镜效果附有源文件

    在Java编程领域,实现放大镜效果是一项常见的任务,特别是在开发图形用户界面(GUI)或图像处理软件时。这个效果能够帮助用户在查看细节时获得更清晰的视觉体验,尤其是在查看小字体或者细微图像时。本项目提供的...

    Java 放大镜.rar

    "Java 放大镜.rar" 提供的正是这样一种功能,它是一个简单的Java桌面应用程序,能够帮助用户放大屏幕上的内容。尽管由于缺少调试环境,我们无法立即验证其实际效果,但从提供的四个Java代码文件中,我们可以探讨一些...

    Java实现的放大镜效果附有源文件.zip

    在Java编程中,实现放大镜效果是一项常见的任务,特别是在开发图形用户界面(GUI)应用程序时。这个主题主要涉及Java的图形绘制和事件处理技术。在提供的压缩包"Java实现的放大镜效果附有源文件.zip"中,可能包含了...

    JAVA图形界面效果--放大镜

    总结,实现Java中的放大镜效果涉及了图形绘制、坐标变换、放大变换以及事件监听等多个技术点。通过理解和应用这些知识,我们可以创建出一个既实用又有视觉吸引力的GUI组件,提升用户的交互体验。在实际项目中,这样...

    放大镜java写的参考下

    通过以上步骤,我们可以构建一个基本的Java放大镜应用。当然,实际项目中可能需要考虑更多的细节,例如平滑缩放、性能优化、交互设计等。对于初学者,可以参考相关的Java GUI教程或示例代码来理解和实现这个功能。在...

    仿放大镜效果

    在Java中实现放大镜效果,我们通常会用到`java.awt.image.BufferedImage`类来处理图像,`java.awt.Graphics2D`类来绘制图像,以及可能用到`java.awt.geom.AffineTransform`类来实现缩放变换。 1. **BufferedImage与...

    Java写的桌面放大镜

    Java编写的桌面放大镜是一种实用工具,它利用Java编程语言的特性实现了一个可以在用户界面(UI)上提供放大效果的应用程序。这样的工具对于查看屏幕上细小的文字或图像非常有帮助,尤其是在设计、编程或者阅读时。...

    基于java的开发源码-实现的放大镜效果附有源文件.zip

    基于java的开发源码-实现的放大镜效果附有源文件.zip 基于java的开发源码-实现的放大镜效果附有源文件.zip 基于java的开发源码-实现的放大镜效果附有源文件.zip 基于java的开发源码-实现的放大镜效果附有源文件.zip ...

    java编的桌面放大镜

    为了让放大镜窗口看起来更像一个真正的放大镜,开发者可能会使用Java的AlphaComposite类来设置窗口的透明度,以及Shape和Graphics2D类来绘制非矩形窗口形状,如圆形或椭圆形,以模拟放大镜的透镜效果。 7. **性能...

    Java写的放大镜程序.rar

    这个程序的源代码可能是用Java Swing或JavaFX库来实现的,这两种库都允许开发者构建丰富的图形组件,包括模拟放大镜效果。 在Java Swing中,可以使用JFrame作为主窗口,然后添加组件,如JPanel或JLabel,来显示图像...

    java做的放大镜

    5. **透明效果**:为了让放大镜窗口看起来更自然,可能还需要实现半透明效果。这可以通过设置窗口的透明度属性来实现。 6. **多线程**:为了保持界面的响应性,图像的捕获和处理工作可能需要在后台线程进行,避免...

    java写的放大镜工具

    通过以上技术的综合运用,我们可以构建出一个功能完善的Java放大镜工具,它不仅能帮助用户查看屏幕上的细微部分,还能通过任务栏图标进行快速访问,提供自定义的大小调整和流畅的自动滑动功能。这样的工具对于设计师...

    java源码:Java实现的放大镜效果附有源文件.rar

    在本资源中,我们关注的是一个使用Java编程语言实现的放大镜效果。放大镜效果通常在图形用户界面(GUI)应用程序中用于提供一种增强用户体验的功能,让用户能够更清晰地查看屏幕上某一区域的细节。这个Java源码项目...

    基于java的实现的放大镜效果附有源文件.zip

    在Java编程语言中,实现放大镜效果是一种常见的GUI(图形用户界面)开发技术,它可以为用户提供更加直观的视觉体验,特别是在处理图像或者查看细节时。本项目提供的"基于java的实现的放大镜效果附有源文件.zip"包含...

    JAVA源码Java实现的放大镜效果附有源文件

    JAVA源码Java实现的放大镜效果附有源文件

    商城购物车图片放大镜效果

    【商城购物车图片放大镜效果】是一种常见的电商网站交互设计,它允许用户在不离开页面的情况下,查看商品图片的详细细节。这种效果通常通过JavaScript、CSS3等前端技术实现,可以提升用户的购物体验,帮助他们更准确...

    基于Java的实现的放大镜效果附有源文件.zip

    在Java编程语言中,实现放大镜效果是一种常见的图形用户界面(GUI)开发任务,它可以用于增强用户对图像细节的观察体验。在这个项目中,我们将会探讨如何利用Java的AWT和Swing库来创建这样的功能,并结合源代码进行...

Global site tag (gtag.js) - Google Analytics