⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcimagepanel.java

📁 基于MPEG 7 标准,符合未来语义网架构,很值得参考
💻 JAVA
字号:
/*
 * This file is part of Caliph & Emir.
 *
 * Caliph & Emir is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Caliph & Emir is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Caliph & Emir; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Copyright statement:
 * --------------------
 * (c) 2005 by Werner Klieber (werner@klieber.info)
 * http://caliph-emir.sourceforge.net
 */
package at.wklieber.gui.dominantcolor;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;

public class DCImagePanel extends JPanel implements MouseListener {
    private BufferedImage img;
    private static int offset = 30;

    private Point start, end, pointA, pointB;
    private boolean clicked = false;

    public DCImagePanel(BufferedImage image) {
        img = image;
        this.setPreferredSize(new Dimension(img.getWidth() + offset, img.getHeight() + offset));
        this.setSize(img.getWidth() + offset, img.getHeight() + offset);
        this.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), " Find dominant colors in this image "));

        this.addMouseListener(this);
        this.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                super.mouseDragged(e);
                end = e.getPoint();
                repaint();
            }
        });

        pointA = new Point();
        pointB = new Point();
    }

    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.drawImage(img, null, offset / 2, offset / 2 + 5);
        g2.setColor(Color.green);
        if (start != null && end != null) {
            int sx, sy, ex, ey;
            sx = start.x;
            if (sx < offset / 2) sx = offset / 2;
            if (sx > img.getWidth() + offset / 2) sx = img.getWidth() + offset / 2;
            ex = end.x;
            if (ex < offset / 2) ex = offset / 2;
            if (ex > img.getWidth() + offset / 2) ex = img.getWidth() + offset / 2;
            sy = start.y;
            if (sy < offset / 2 + 5) sy = offset / 2 + 5;
            if (sy > (img.getHeight() + offset / 2 + 5)) sy = img.getHeight() + offset / 2 + 5;
            ey = end.y;
            if (ey < offset / 2 + 5) ey = offset / 2 + 5;
            if (ey > (img.getHeight() + offset / 2 + 5)) ey = img.getHeight() + offset / 2 + 5;

            if (start.x > end.x && start.y > end.y) {
                int tx, ty;
                tx = ex;
                ex = sx;
                sx = tx;
                ty = sy;
                sy = ey;
                ey = ty;
            } else if (start.x > end.x && start.y < end.y) {
                int tmp = sx;
                sx = ex;
                ex = tmp;
            } else if (start.x < end.x && start.y > end.y) {
                int tmp = sy;
                sy = ey;
                ey = tmp;
            }

            g2.setColor(Color.green);
            g2.drawRect(sx, sy, ex - sx, ey - sy);
            g2.setColor(Color.red);
            g2.drawRect(sx - 1, sy - 1, ex - sx + 2, ey - sy + 2);

            pointA.setLocation(sx, sy);
            pointB.setLocation(ex, ey);
        }

    }

    public void mouseClicked(MouseEvent e) {

    }

    public void mousePressed(MouseEvent e) {
        start = e.getPoint();
        clicked = true;
        // System.out.println("Mouse clicked ...");
    }

    public void mouseReleased(MouseEvent e) {
        end = e.getPoint();
        clicked = false;
        repaint();
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void clearRegion() {
        start = null;
        end = null;
        repaint();
    }

    public void leftHalf() {
        start = new Point(offset / 2, offset / 2 + 5);  // links oben
        end = new Point(img.getWidth() / 2 + offset / 2, img.getHeight() + offset / 2 + 5); // mitte unten
        repaint();
    }

    public void rightHalf() {
        start = new Point(img.getWidth() / 2 + offset / 2, offset / 2 + 5);   // mitte oben
        end = new Point(img.getWidth() + offset / 2, img.getHeight() + offset / 2 + 5);  // rechts unten
        repaint();
    }

    public void upperHalf() {
        start = new Point(offset / 2, offset / 2 + 5); // links oben
        end = new Point(img.getWidth() + offset / 2, img.getHeight() / 2 + offset / 2 + 5); // mitte rechts
        repaint();
    }

    public void bottomHalf() {
        start = new Point(offset / 2, img.getHeight() / 2 + offset / 2 + 5); // mitte links
        end = new Point(img.getWidth() + offset / 2, img.getHeight() + offset / 2 + 5); // rechts unten
        repaint();
    }

    public void leftThird() {
        start = new Point(offset / 2, offset / 2 + 5);
        end = new Point(img.getWidth() / 3 + offset / 2, img.getHeight() + offset / 2 + 5);
        repaint();
    }

    public void middleThird() {
        start = new Point(img.getWidth() / 3 + offset / 2, offset / 2 + 5);
        end = new Point(2 * img.getWidth() / 3 + offset / 2, img.getHeight() + offset / 2 + 5);
        repaint();
    }

    public void rightThird() {
        start = new Point(2 * img.getWidth() / 3 + offset / 2, offset / 2 + 5);
        end = new Point(img.getWidth() + offset / 2, img.getHeight() + offset / 2 + 5);
        repaint();
    }

    public void upperThird() {
        start = new Point(offset / 2, offset / 2 + 5);
        end = new Point(img.getWidth() + offset / 2, img.getHeight() / 3 + offset / 2 + 5);
        repaint();
    }

    public void centerThird() {
        start = new Point(offset / 2, img.getHeight() / 3 + offset / 2 + 5);
        end = new Point(img.getWidth() + offset / 2, 2 * img.getHeight() / 3 + offset / 2 + 5);
        repaint();
    }

    public void bottomThird() {
        start = new Point(offset / 2, 2 * img.getHeight() / 3 + offset / 2 + 5);
        end = new Point(img.getWidth() + offset / 2, img.getHeight() + offset / 2 + 5);
        repaint();
    }

    public void centerBig() {
        start = new Point(img.getWidth() / 4 + offset / 2, img.getHeight() / 4 + offset / 2 + 5);
        end = new Point(3 * img.getWidth() / 4 + offset / 2, 3 * img.getHeight() / 4 + offset / 2 + 5);
        repaint();
    }

    public void centerSmall() {
        start = new Point(img.getWidth() / 3 + offset / 2, img.getHeight() / 3 + offset / 2 + 5);
        end = new Point(2 * img.getWidth() / 3 + offset / 2, 2 * img.getHeight() / 3 + offset / 2 + 5);
        repaint();
    }

    public void setRect(Point leftUpperCorner, Point rightBottomCorner) {
        start.setLocation(leftUpperCorner.x + offset / 2, leftUpperCorner.y + offset / 2 + 5);
        end.setLocation(rightBottomCorner.x + offset / 2, rightBottomCorner.y + offset / 2 + 5);
        repaint();
    }

    public Point getPointA() {
        Point returnP = null;
        if (start != null)
            returnP = new Point(pointA.x - offset / 2, pointA.y - offset / 2 - 5);
        return returnP;
    }

    public Point getPointB() {
        Point returnP = null;
        if (start != null)
            returnP = new Point(pointB.x - offset / 2, pointB.y - offset / 2 - 5);
        return returnP;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -