亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? canvascomponent.java

?? 一個用Java 造成的小畫家
?? JAVA
字號:
package onlyfun.caterpillar.app.EasyJShop.main;

import java.awt.BasicStroke;
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.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;

import java.awt.Font;

public class CanvasComponent extends JComponent {
    public final static int SelectionMode = 0;
    public final static int BrushMode = 1;
    public final static int PasteMode = 2;
    public final static int TextMode = 3;
    public final static int ViewMode = 4;
    
    private Image image, pastedImage, fakeImage;
    private Point start, end;
    private Rectangle2D rect;
    private BasicStroke stroke, stroke2, lineStroke; 
    private Line2D line;
    
    private int editMode;
    private double scale;
    private Color foreColor, backColor;
    private int brushWidth;
    
    private String text;
    private Font textFont;
    
    public CanvasComponent() {
        rect = new Rectangle2D.Double();
        
        stroke = new BasicStroke(1, BasicStroke.CAP_ROUND, 0,
                BasicStroke.JOIN_ROUND, new float[] {5, 5}, 0);
        stroke2 = new BasicStroke(1, BasicStroke.CAP_ROUND, 0,
                BasicStroke.JOIN_ROUND, new float[] {5, 5}, 5);
        
        line = new Line2D.Double();
        
        brushWidth = 10;
        scale = 1.0;
    }
    
    public CanvasComponent(Image image) {
        this();
        setImage(image);
    }
        
    public void resetRect() {
        rect.setRect(0, 0, 0, 0);
    }
    
    public Dimension getPreferredSize() {
        Dimension dimension = super.getPreferredSize();        
        dimension.setSize(image.getWidth(this)*scale + 1, image.getHeight(this)*scale + 1);
        return dimension;
    }
    
    public Rectangle2D getSelectedRect() {
        return new Rectangle2D.Double(rect.getX()/scale, rect.getY()/scale, rect.getWidth()/scale, rect.getHeight()/scale);
    }
    
    public void setStart(Point start) {
        this.start = start;
    }
    
    public void setEnd(Point end) {
        this.end = end;
    }
    
    public void dragRect(Point point) {
        end = point;
        
        double tmpX = end.getX();
        double tmpY = end.getY();
        double tmpWidth = image.getWidth(this) * scale;
        double tmpHeight = image.getHeight(this) * scale;
        
        if(tmpX < 0)
            tmpX = 0;
        if(tmpX > tmpWidth)
            tmpX = tmpWidth;
        if(tmpY < 0)
            tmpY = 0;
        if(tmpY > tmpHeight)
            tmpY = tmpHeight;
        
        end.setLocation(tmpX, tmpY);
        
        calculateSelectedRect();
        repaint();
    }
 
    protected void paintComponent(Graphics g) {        
        switch(getEditMode()) {
            case 0: // SelectionMode
                drawDashedRect(g);
                break;
            case 1: // BrushMode
                brushImage(g);
                break;
            case 2: // PasteMode
                pasteImage(g);
                break;
            case 3:
                drawText(g);
                break;
            default: // SelectionMode
                drawDashedRect(g);
        }
    }
    
    public void mergePastedImage() {
        if(pastedImage != null) {
            Graphics g = image.getGraphics();
            g.drawImage(pastedImage, (int)(start.getX()/scale), (int)(start.getY()/scale), this);
            repaint();
        }
    }
    
    public void mergeText() {
        if(text != null) {
            Graphics g = image.getGraphics();
            g.setFont(textFont);
            g.setColor(getForeground());
            g.drawString(text, (int)(start.getX()/scale), (int)(start.getY()/scale));
            repaint();
        }
    }
    
    private void pasteImage(Graphics g) {
        Graphics fakeGraphics = fakeImage.getGraphics();
        fakeGraphics.drawImage(image, 0, 0, this);
        
        if(pastedImage != null) {
            if(start != null)
                fakeGraphics.drawImage(pastedImage, (int)(start.getX()/scale), (int)(start.getY()/scale), this);
            else
                g.drawImage(pastedImage, 0, 0, this);
        }
        
        g.drawImage(fakeImage, 0, 0, (int)(image.getWidth(this)*scale), (int)(image.getHeight(this)*scale), this);
    }
    
    private void drawText(Graphics g) {
        Graphics fakeGraphics = fakeImage.getGraphics();
        fakeGraphics.drawImage(image, 0, 0, this);
        
        if(text != null) {
            fakeGraphics.setFont(textFont);
            fakeGraphics.setColor(getForeground());
            if(start != null)
                fakeGraphics.drawString(text, (int)(start.getX()/scale), (int)(start.getY()/scale));
            else
                fakeGraphics.drawString(text, 0, 0);
        }
        g.drawImage(fakeImage, 0, 0, (int)(image.getWidth(this)*scale), (int)(image.getHeight(this)*scale), this);
    }
    
    private void drawDashedRect(Graphics g) {
        g.drawImage(image, 0, 0, 
                (int) (image.getWidth(this) * scale), (int) (image.getHeight(this) * scale), this);
        
        //g = fakeImage.getGraphics();
        //g.drawImage(image, 0, 0, this);
        
        Graphics2D g2 = (Graphics2D) g;
        
        g2.setStroke(stroke);
        g2.setPaint(Color.black);
        g2.draw(rect);
        
        g2.setStroke(stroke2);
        g2.setPaint(Color.white);
        g2.draw(rect);
    }
    
    private void brushImage(Graphics g) {
        int corner = getBrushWidth() / 2;

        Graphics imageGraphics = image.getGraphics();
        imageGraphics.setColor(getForeground());
        
        if(start != null) {
            imageGraphics.fillOval((int)(start.getX()/scale - corner), (int)(start.getY()/scale - corner), getBrushWidth(), getBrushWidth());

            if(end != null) {
                Graphics2D imageGraphics2D = (Graphics2D) imageGraphics;
                imageGraphics2D.setStroke(lineStroke);
                imageGraphics2D.setColor(getForeground());
                line.setLine(start.getX()/scale, start.getY()/scale, end.getX()/scale, end.getY()/scale);
                imageGraphics2D.draw(line);
                start = end;
            }
        }
        
        g.drawImage(image, 0, 0, 
                (int) (image.getWidth(this) * scale), (int) (image.getHeight(this) * scale), this);
    }
    
    private void calculateSelectedRect() {
        double startX = start.getX();
        double startY = start.getY();
        double endX = end.getX();
        double endY = end.getY();
        
        double swidth = endX - startX;
        double sheight = endY - startY;

        if(swidth > 0 && sheight > 0) {
            rect.setRect(startX, startY,
                          swidth, sheight);
        } 
        else if(swidth > 0 && sheight < 0) {
            rect.setRect(startX, endY,
                             swidth, -sheight);
        }
        else if(swidth < 0 && sheight > 0) {
            rect.setRect(endX, startY,
                              -swidth, sheight);
 
        }
        else if(swidth < 0 && sheight < 0) {
            rect.setRect(endX, endY, 
                             -swidth, -sheight);
        }
    }

    public void setImage(Image image) {
        this.image = image;
        fakeImage = new BufferedImage(image.getWidth(this) , image.getHeight(this), BufferedImage.TYPE_INT_RGB);
    }
    
    public Image getImage() {
        return image;
    }
    
    public void setEditMode(int editMode) {
        this.editMode = editMode;
    }
    
    public int getEditMode() {
        return editMode;
    }
    
    public Color getForeground() {
        return foreColor;
    }

    public void setForeground(Color foreColor) {
        this.foreColor = foreColor;
    }
    
    public Color getBackground() {
        return backColor;
    }

    public void setBackground(Color backColor) {
        this.backColor = backColor;
    }

    public int getBrushWidth() {
        return brushWidth;
    }
    public void setBrushWidth(int brushWidth) {
        this.brushWidth = brushWidth;
        lineStroke = new BasicStroke(brushWidth);
    }
    public void setPastedImage(Image pastedImage) {
        this.pastedImage = pastedImage;
        repaint();
    }
    
    public String getText() {
        return text;
    }
    
    public void setText(String text, Font textFont) {
        this.text = text;
        this.textFont = textFont;
    }
    public double getScale() {
        return scale;
    }
    
    public void increaseViewScale() {
        scale = scale * 2;
        if(scale > 16.0)
            this.scale = 16.0;
    }
    
    public void decreaseViewScale() {
        scale = scale / 2;
        if(scale < 0.0625)
            this.scale = 0.0625;
    }
    
    public void setScale(double scale) {
        if(scale > 16.0)
            this.scale = 16.0;
        else if(scale < 0.0625)
            this.scale = 0.0625;
        else
            this.scale = scale;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级二级在线观看| 国产一级精品在线| 精品国产乱码久久久久久久久| 国产精品资源网| 一区二区三区免费在线观看| 国产午夜亚洲精品不卡| 欧美成人a∨高清免费观看| 日本韩国一区二区| 美脚の诱脚舐め脚责91 | 91香蕉国产在线观看软件| 蜜桃免费网站一区二区三区| 亚洲精品美腿丝袜| 18欧美乱大交hd1984| 日本一区二区视频在线观看| 精品黑人一区二区三区久久 | 在线综合视频播放| 在线观看日韩电影| 在线观看av一区| 欧美色倩网站大全免费| 色综合久久久久综合体| 色综合久久九月婷婷色综合| 91在线视频18| 欧美性高清videossexo| 欧美丝袜自拍制服另类| 欧美伦理影视网| 日韩欧美黄色影院| 久久亚洲精品小早川怜子| 国产亚洲一本大道中文在线| 国产精品乱码人人做人人爱| 一区二区三区四区中文字幕| 亚洲第一电影网| 韩国中文字幕2020精品| 成人福利视频网站| 欧美性猛片xxxx免费看久爱| 91精品国产欧美一区二区18| 久久久精品综合| 亚洲激情中文1区| 久久精品久久久精品美女| 国产成人丝袜美腿| 色av一区二区| 91精品国产91热久久久做人人| 亚洲精品大片www| 日本欧美大码aⅴ在线播放| **网站欧美大片在线观看| 精品国内二区三区| 精品国产欧美一区二区| aaa亚洲精品| 国产精品乡下勾搭老头1| 国产又黄又大久久| 欧美成人高清电影在线| www.欧美精品一二区| 激情伊人五月天久久综合| 综合欧美一区二区三区| 久久综合九色综合欧美就去吻| 精品无人码麻豆乱码1区2区| 91丨porny丨最新| 在线观看国产精品网站| 色综合久久天天| av中文字幕不卡| wwww国产精品欧美| 亚洲午夜成aⅴ人片| 视频一区免费在线观看| 久久99精品国产.久久久久| 国内外成人在线| 91麻豆精品秘密| 日韩理论在线观看| 国产成人一级电影| 91精品国产综合久久精品图片| 《视频一区视频二区| 国产精品91xxx| 久久综合九色综合欧美亚洲| 强制捆绑调教一区二区| 欧美日韩精品欧美日韩精品一| 亚洲欧美一区二区视频| 成人激情视频网站| 国产精品污网站| av电影天堂一区二区在线观看| 欧美精品一区视频| 国产成人精品一区二区三区四区| 中文字幕av一区二区三区高| www.亚洲国产| 性欧美大战久久久久久久久| 欧美精品自拍偷拍动漫精品| 久久97超碰国产精品超碰| 亚洲色图第一区| 欧美日韩国产另类不卡| 亚洲男女一区二区三区| 4438x亚洲最大成人网| 激情综合色综合久久| 欧美国产日产图区| 欧美优质美女网站| 国产一区激情在线| 夜色激情一区二区| 欧美成人性福生活免费看| 91视频免费看| 久久99久久久欧美国产| 亚洲天堂福利av| 日韩欧美一二区| 色噜噜狠狠色综合中国| 久久99精品久久久| 亚洲一区二区黄色| 国产色产综合产在线视频| 欧美精品一二三区| 91视频在线看| av影院午夜一区| 久草精品在线观看| 日韩电影在线免费| 亚洲免费观看高清完整版在线| 日韩精品一区二区三区蜜臀| 欧美日韩精品系列| 91成人免费在线视频| av动漫一区二区| 国产一区二区三区免费看 | 国产乱人伦偷精品视频免下载 | 午夜精品久久久久久久久久久| 欧美国产日韩亚洲一区| 国产欧美日本一区二区三区| 国产日韩欧美高清| 久久影院电视剧免费观看| 欧美xxxxxxxx| 久久五月婷婷丁香社区| 久久先锋影音av| 国产区在线观看成人精品| 国产女人水真多18毛片18精品视频| 日韩一区二区免费在线观看| 日韩一区二区在线免费观看| 91麻豆精品国产自产在线观看一区| 在线精品亚洲一区二区不卡| 欧美三级电影在线看| 欧美精品黑人性xxxx| 欧美一区二区日韩| 久久久久88色偷偷免费| 国产精品色呦呦| 一个色综合网站| 日韩精品电影在线观看| 国产乱理伦片在线观看夜一区| 大美女一区二区三区| 日本韩国欧美一区| 日韩视频一区二区三区| 国产视频视频一区| 亚洲综合色视频| 麻豆精品在线播放| 9人人澡人人爽人人精品| 欧美色视频在线| 欧美国产日韩精品免费观看| 亚洲mv大片欧洲mv大片精品| 风间由美一区二区三区在线观看 | 欧美一级淫片007| 久久久国产精品午夜一区ai换脸| 亚洲精选免费视频| 日本麻豆一区二区三区视频| 不卡的av在线| 精品嫩草影院久久| 亚洲国产日日夜夜| 国产成人aaa| 日韩精品一区二区三区视频播放 | heyzo一本久久综合| 欧美一区二区三区四区久久| 国产精品美女久久久久久久久久久 | 国产免费成人在线视频| 日韩成人免费电影| 欧美性猛交xxxxxx富婆| 亚洲欧美日韩国产综合在线| 国产精品白丝jk黑袜喷水| 正在播放一区二区| 怡红院av一区二区三区| 95精品视频在线| 欧美国产激情二区三区 | 国产一区二区免费在线| 欧美一区二区在线看| 午夜视频在线观看一区二区三区| 97精品久久久久中文字幕| 久久综合五月天婷婷伊人| 麻豆精品精品国产自在97香蕉| 欧美男女性生活在线直播观看| 亚洲国产一区视频| 欧美三区在线观看| 丝袜亚洲精品中文字幕一区| 欧美综合久久久| 亚洲国产成人av| 精品美女一区二区| 国产黄色成人av| 亚洲欧美福利一区二区| 日本韩国欧美国产| 另类小说综合欧美亚洲| 久久久久久亚洲综合| 岛国精品在线播放| 亚洲黄网站在线观看| 欧美一三区三区四区免费在线看| 麻豆成人久久精品二区三区小说| 久久欧美一区二区| 91理论电影在线观看| 五月天一区二区| 国产片一区二区| 94色蜜桃网一区二区三区| 免费欧美在线视频| 亚洲欧洲日韩女同| 欧美一级久久久| 成人午夜在线免费| 蜜桃av噜噜一区|