<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0

    剛才把截屏程序放出去之后,收到了朋友BeanSoft 的建議,剛來這里就能認識他,很高興,現在又改進了一下,改進的地方如下

    1,修復了選擇選區后,再改變大小時,當把右側的邊框拖過左側或者左側的邊框拖到右側或者上面的邊框拖過下面,只會顯示一條邊框的BUG.
    2,在沒有截屏的時候,會有一條提示的字符串跟著鼠標走.
    3,在點了截屏之后,主窗口會先隱藏起來,截完圖后才會彈出來
    4,去掉了截屏時的自定義鼠標顯示,因為這樣的話,源代碼編譯之后,運行會出問題,因為別人的電腦上沒有我那個鼠標的圖片.
    5,增加了可保存的圖片格式,現在可保存(JPG,GIF,PNG,BMP)格式

    源代碼附上,可以直接自己編譯,打成JAR包.我這里也提供一下可執行JAR包的下載.


    點擊下載可執行的JAR包
    /*
     * CaptureScreen.java
     *
     * Created on 2007年8月30日, 下午12:46
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     
    */


    package hadeslee.swing;

    /**
     *
     * 
    @author lbf
     
    */

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
    import javax.imageio.*;
    import java.awt.image.*;
    public class CaptureScreen extends JFrame implements ActionListener{
        
    private JButton start,cancel,save;
        
    private JPanel c;
        
    private BufferedImage get;
        
    /** Creates a new instance of CaptureScreen */
        
    public CaptureScreen() {
            
    super("屏幕截取軟件(第二版)");
            initWindow();
        }

        
    private void initWindow(){
            start
    =new JButton("開始截取");
            cancel
    =new JButton("退出");
            save
    =new JButton("保存");
            save.setEnabled(
    false);
            save.addActionListener(
    this);
            start.addActionListener(
    this);
            cancel.addActionListener(
    this);
            JPanel buttonJP
    =new JPanel();
            c
    =new JPanel(new BorderLayout());
            JLabel jl
    =new JLabel("屏幕截取",JLabel.CENTER);
            JLabel jl1
    =new JLabel("作者:千里冰封",JLabel.CENTER);
            jl.setFont(
    new Font("黑體",Font.BOLD,40));
            jl1.setFont(
    new Font("宋體",Font.BOLD,20));
            jl.setForeground(Color.RED);
            jl1.setForeground(Color.BLUE);
            c.add(jl,BorderLayout.CENTER);
            c.add(jl1,BorderLayout.SOUTH);
            buttonJP.add(start);
            buttonJP.add(save);
            buttonJP.add(cancel);
            
    this.getContentPane().add(c,BorderLayout.CENTER);
            
    this.getContentPane().add(buttonJP,BorderLayout.SOUTH);
            
    this.setSize(300,300);
            
    this.setLocationRelativeTo(null);
            
    this.setVisible(true);
            
    this.setAlwaysOnTop(true);
            
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        
    private void updates(){
            
    this.setVisible(true);
            
    if(get!=null){
                save.setEnabled(
    true);
                ImageIcon ii
    =new ImageIcon(get);
                JLabel jl
    =new JLabel(ii);
                c.removeAll();
                c.add(
    new JScrollPane(jl),BorderLayout.CENTER);
                SwingUtilities.updateComponentTreeUI(
    this);
            }

        }

        
    private void doStart(){
            
    try{
                
    this.setVisible(false);
                Thread.sleep(
    500);//睡500毫秒是為了讓主窗完全不見
                Robot ro=new Robot();
                Toolkit tk
    =Toolkit.getDefaultToolkit();
                Dimension di
    =tk.getScreenSize();
                Rectangle rec
    =new Rectangle(0,0,di.width,di.height);
                BufferedImage bi
    =ro.createScreenCapture(rec);
                JFrame jf
    =new JFrame();
                Temp temp
    =new Temp(jf,bi,di.width,di.height);
                jf.getContentPane().add(temp,BorderLayout.CENTER);
                jf.setUndecorated(
    true);
                jf.setSize(di);
                jf.setVisible(
    true);
                jf.setAlwaysOnTop(
    true);
            }
     catch(Exception exe){
                exe.printStackTrace();
            }

        }
     
        
    private void doSave(){
            
    try{
                JFileChooser jfc
    =new JFileChooser(".");
                jfc.addChoosableFileFilter(
    new JPGfilter());
                jfc.addChoosableFileFilter(
    new PNGfilter());
                jfc.addChoosableFileFilter(
    new GIFfilter());
                jfc.addChoosableFileFilter(
    new BMPfilter());
                
    int i=jfc.showSaveDialog(this);
                
    if(i==JFileChooser.APPROVE_OPTION){
                    File file
    =jfc.getSelectedFile();
                    String about
    ="PNG";
                    String ext
    =file.toString().toLowerCase();
                    javax.swing.filechooser.FileFilter ff
    =jfc.getFileFilter();
                    
    if(ff instanceof JPGfilter){
                        
    if(!ext.endsWith(".jpg")){
                            String ns
    =ext+".jpg";
                            file
    =new File(ns);
                            about
    ="JPG";
                        }

                    }
     else if(ff instanceof PNGfilter){
                        
    if(!ext.endsWith(".png")){
                            String ns
    =ext+".png";
                            file
    =new File(ns);
                            about
    ="PNG";
                        }

                    }
    else if(ff instanceof BMPfilter){
                        
    if(!ext.endsWith(".bmp")){
                            String ns
    =ext+".bmp";
                            file
    =new File(ns);
                            about
    ="BMP";
                        }

                    }
    else if(ff instanceof GIFfilter){
                        
    if(!ext.endsWith(".gif")){
                            String ns
    =ext+".gif";
                            file
    =new File(ns);
                            about
    ="GIF";
                        }

                    }

                    
    if(ImageIO.write(get,about,file)){
                        JOptionPane.showMessageDialog(
    this,"保存成功!");
                    }
     else
                        JOptionPane.showMessageDialog(
    this,"保存失敗!");
                }

            }
     catch(Exception exe){
                exe.printStackTrace();
            }

        }

        
    public void actionPerformed(ActionEvent ae){
            
    if(ae.getSource()==start){
                doStart();
            }
     else if(ae.getSource()==cancel){
                System.exit(
    0);
            }
     else if(ae.getSource()==save){
                doSave();
            }

        }

        
    //保存BMP格式的過濾器
        private class BMPfilter extends javax.swing.filechooser.FileFilter{
            
    public BMPfilter(){
                
            }

            
    public boolean accept(File file){
                
    if(file.toString().toLowerCase().endsWith(".bmp")||
                        file.isDirectory())
    {
                    
    return true;
                }
     else
                    
    return false;
            }

            
    public String getDescription(){
                
    return "*.BMP(BMP圖像)";
            }

        }

        
    //保存JPG格式的過濾器
        private class JPGfilter extends javax.swing.filechooser.FileFilter{
            
    public JPGfilter(){
                
            }

            
    public boolean accept(File file){
                
    if(file.toString().toLowerCase().endsWith(".jpg")||
                        file.toString().toLowerCase().endsWith(
    ".jpeg")||
                        file.isDirectory())
    {
                    
    return true;
                }
     else
                    
    return false;
            }

            
    public String getDescription(){
                
    return "*.JPG,*.JPEG(JPG,JPEG圖像)";
            }

        }

        
    //保存GIF格式的過濾器
        private class GIFfilter extends javax.swing.filechooser.FileFilter{
            
    public GIFfilter(){
                
            }

            
    public boolean accept(File file){
                
    if(file.toString().toLowerCase().endsWith(".gif")||
                        file.isDirectory())
    {
                    
    return true;
                }
     else
                    
    return false;
            }

            
    public String getDescription(){
                
    return "*.GIF(GIF圖像)";
            }

        }

        
        
    //保存PNG格式的過濾器
        private class PNGfilter extends javax.swing.filechooser.FileFilter{
            
    public boolean accept(File file){
                
    if(file.toString().toLowerCase().endsWith(".png")||
                        file.isDirectory())
    {
                    
    return true;
                }
     else
                    
    return false;
            }

            
    public String getDescription(){
                
    return "*.PNG(PNG圖像)";
            }

        }

        
    //一個暫時類,用于顯示當前的屏幕圖像
        private class Temp extends JPanel implements MouseListener,MouseMotionListener{
            
    private BufferedImage bi;
            
    private int width,height;
            
    private int startX,startY,endX,endY,tempX,tempY;
            
    private JFrame jf;
            
    private Rectangle select=new Rectangle(0,0,0,0);//表示選中的區域
            private Cursor cs=new Cursor(Cursor.CROSSHAIR_CURSOR);//表示一般情況下的鼠標狀態
            private States current=States.DEFAULT;// 表示當前的編輯狀態
            private Rectangle[] rec;//表示八個編輯點的區域
            
    //下面四個常量,分別表示誰是被選中的那條線上的端點
            public static final int START_X=1;
            
    public static final int START_Y=2;
            
    public static final int END_X=3;
            
    public static final int END_Y=4;
            
    private int currentX,currentY;//當前被選中的X和Y,只有這兩個需要改變
            private Point p=new Point();//當前鼠標移的地點
            private boolean showTip=true;//是否顯示提示.如果鼠標左鍵一按,則提示不再顯了
            public Temp(JFrame jf,BufferedImage bi,int width,int height){
                
    this.jf=jf;
                
    this.bi=bi;
                
    this.width=width;
                
    this.height=height;
                
    this.addMouseListener(this);
                
    this.addMouseMotionListener(this);
                initRecs();
            }

            
    private void initRecs(){
                rec
    =new Rectangle[8];
                
    for(int i=0;i<rec.length;i++){
                    rec[i]
    =new Rectangle();
                }

            }

            
    public void paintComponent(Graphics g){
                g.drawImage(bi,
    0,0,width,height,this);
                g.setColor(Color.RED);
                g.drawLine(startX,startY,endX,startY);
                g.drawLine(startX,endY,endX,endY);
                g.drawLine(startX,startY,startX,endY);
                g.drawLine(endX,startY,endX,endY);
                
    int x=startX<endX?startX:endX;
                
    int y=startY<endY?startY:endY;
                select
    =new Rectangle(x,y,Math.abs(endX-startX),Math.abs(endY-startY));
                
    int x1=(startX+endX)/2;
                
    int y1=(startY+endY)/2;
                g.fillRect(x1
    -2,startY-2,5,5);
                g.fillRect(x1
    -2,endY-2,5,5);
                g.fillRect(startX
    -2,y1-2,5,5);
                g.fillRect(endX
    -2,y1-2,5,5);
                g.fillRect(startX
    -2,startY-2,5,5);
                g.fillRect(startX
    -2,endY-2,5,5);
                g.fillRect(endX
    -2,startY-2,5,5);
                g.fillRect(endX
    -2,endY-2,5,5);
                rec[
    0]=new Rectangle(x-5,y-5,10,10);
                rec[
    1]=new Rectangle(x1-5,y-5,10,10);
                rec[
    2]=new Rectangle((startX>endX?startX:endX)-5,y-5,10,10);
                rec[
    3]=new Rectangle((startX>endX?startX:endX)-5,y1-5,10,10);
                rec[
    4]=new Rectangle((startX>endX?startX:endX)-5,(startY>endY?startY:endY)-5,10,10);
                rec[
    5]=new Rectangle(x1-5,(startY>endY?startY:endY)-5,10,10);
                rec[
    6]=new Rectangle(x-5,(startY>endY?startY:endY)-5,10,10);
                rec[
    7]=new Rectangle(x-5,y1-5,10,10);
                
    if(showTip){
                    g.setColor(Color.CYAN);
                    g.fillRect(p.x,p.y,
    170,20);
                    g.setColor(Color.RED);
                    g.drawRect(p.x,p.y,
    170,20);
                    g.setColor(Color.BLACK);
                    g.drawString(
    "請按住鼠標左鍵不放選擇截圖區",p.x,p.y+15);
                }

            }

            
    //根據東南西北等八個方向決定選中的要修改的X和Y的座標
            private void initSelect(States state){
                
    switch(state){
                    
    case DEFAULT:
                        currentX
    =0;
                        currentY
    =0;
                        
    break;
                    
    case EAST:
                        currentX
    =(endX>startX?END_X:START_X);
                        currentY
    =0;
                        
    break;
                    
    case WEST:
                        currentX
    =(endX>startX?START_X:END_X);
                        currentY
    =0;
                        
    break;
                    
    case NORTH:
                        currentX
    =0;
                        currentY
    =(startY>endY?END_Y:START_Y);
                        
    break;
                    
    case SOUTH:
                        currentX
    =0;
                        currentY
    =(startY>endY?START_Y:END_Y);
                        
    break;
                    
    case NORTH_EAST:
                        currentY
    =(startY>endY?END_Y:START_Y);
                        currentX
    =(endX>startX?END_X:START_X);
                        
    break;
                    
    case NORTH_WEST:
                        currentY
    =(startY>endY?END_Y:START_Y);
                        currentX
    =(endX>startX?START_X:END_X);
                        
    break;
                    
    case SOUTH_EAST:
                        currentY
    =(startY>endY?START_Y:END_Y);
                        currentX
    =(endX>startX?END_X:START_X);
                        
    break;
                    
    case SOUTH_WEST:
                        currentY
    =(startY>endY?START_Y:END_Y);
                        currentX
    =(endX>startX?START_X:END_X);
                        
    break;
                    
    default:
                        currentX
    =0;
                        currentY
    =0;
                        
    break;
                }

            }

            
    public void mouseMoved(MouseEvent me){
                doMouseMoved(me);
                initSelect(current);
                
    if(showTip){
                    p
    =me.getPoint();
                    repaint();
                }

            }

            
    //特意定義一個方法處理鼠標移動,是為了每次都能初始化一下所要選擇的地區
            private void doMouseMoved(MouseEvent me){
                
    if(select.contains(me.getPoint())){
                    
    this.setCursor(new Cursor(Cursor.MOVE_CURSOR));
                    current
    =States.MOVE;
                }
     else{
                    States[] st
    =States.values();
                    
    for(int i=0;i<rec.length;i++){
                        
    if(rec[i].contains(me.getPoint())){
                            current
    =st[i];
                            
    this.setCursor(st[i].getCursor());
                            
    return;
                        }

                    }

                    
    this.setCursor(cs);
                    current
    =States.DEFAULT;
                }

            }

            
    public void mouseExited(MouseEvent me){
                
            }

            
    public void mouseEntered(MouseEvent me){
                
            }

            
    public void mouseDragged(MouseEvent me){
                
    int x=me.getX();
                
    int y=me.getY();
                
    if(current==States.MOVE){
                    startX
    +=(x-tempX);
                    startY
    +=(y-tempY);
                    endX
    +=(x-tempX);
                    endY
    +=(y-tempY);
                    tempX
    =x;
                    tempY
    =y;
                }
    else if(current==States.EAST||current==States.WEST){
                    
    if(currentX==START_X){
                        startX
    +=(x-tempX);
                        tempX
    =x;
                    }
    else{
                        endX
    +=(x-tempX);
                        tempX
    =x;
                    }

                }
    else if(current==States.NORTH||current==States.SOUTH){
                    
    if(currentY==START_Y){
                        startY
    +=(y-tempY);
                        tempY
    =y;
                    }
    else{
                        endY
    +=(y-tempY);
                        tempY
    =y;
                    }

                }
    else if(current==States.NORTH_EAST||current==States.NORTH_EAST||
                        current
    ==States.SOUTH_EAST||current==States.SOUTH_WEST){
                    
    if(currentY==START_Y){
                        startY
    +=(y-tempY);
                        tempY
    =y;
                    }
    else{
                        endY
    +=(y-tempY);
                        tempY
    =y;
                    }

                    
    if(currentX==START_X){
                        startX
    +=(x-tempX);
                        tempX
    =x;
                    }
    else{
                        endX
    +=(x-tempX);
                        tempX
    =x;
                    }

                    
                }
    else{
                    startX
    =tempX;
                    startY
    =tempY;
                    endX
    =me.getX();
                    endY
    =me.getY();
                }

                
    this.repaint();
            }

            
    public void mousePressed(MouseEvent me){
                showTip
    =false;
                tempX
    =me.getX();
                tempY
    =me.getY();
            }

            
    public void mouseReleased(MouseEvent me){
                
    if(me.isPopupTrigger()){
                    
    if(current==States.MOVE){
                        showTip
    =true;
                        p
    =me.getPoint();
                        startX
    =0;
                        startY
    =0;
                        endX
    =0;
                        endY
    =0;
                        repaint();
                    }
     else{
                        jf.dispose();
                        updates();
                    }

                    
                }

            }

            
    public void mouseClicked(MouseEvent me){
                
    if(me.getClickCount()==2){
                    
    //Rectangle rec=new Rectangle(startX,startY,Math.abs(endX-startX),Math.abs(endY-startY));
                    Point p=me.getPoint();
                    
    if(select.contains(p)){
                        
    if(select.x+select.width<this.getWidth()&&select.y+select.height<this.getHeight()){
                            get
    =bi.getSubimage(select.x,select.y,select.width,select.height);
                            jf.dispose();
                            save.setEnabled(
    true);
                            updates();
                        }
    else{
                            
    int wid=select.width,het=select.height;
                            
    if(select.x+select.width>=this.getWidth()){
                                wid
    =this.getWidth()-select.x;
                            }

                            
    if(select.y+select.height>=this.getHeight()){
                                het
    =this.getHeight()-select.y;
                            }

                            get
    =bi.getSubimage(select.x,select.y,wid,het);
                            jf.dispose();
                            save.setEnabled(
    true);
                            updates();
                        }

                        
                    }

                }

            }

        }

        
        
    public static void main(String args[]){
            
    new CaptureScreen();
        }

    }

    enum States{
        NORTH_WEST(
    new Cursor(Cursor.NW_RESIZE_CURSOR)),//表示西北角
        NORTH(new Cursor(Cursor.N_RESIZE_CURSOR)),
        NORTH_EAST(
    new Cursor(Cursor.NE_RESIZE_CURSOR)),
        EAST(
    new Cursor(Cursor.E_RESIZE_CURSOR)),
        SOUTH_EAST(
    new Cursor(Cursor.SE_RESIZE_CURSOR)),
        SOUTH(
    new Cursor(Cursor.S_RESIZE_CURSOR)),
        SOUTH_WEST(
    new Cursor(Cursor.SW_RESIZE_CURSOR)),
        WEST(
    new Cursor(Cursor.W_RESIZE_CURSOR)),
        MOVE(
    new Cursor(Cursor.MOVE_CURSOR)),
        DEFAULT(
    new Cursor(Cursor.DEFAULT_CURSOR));
        
    private Cursor cs;
        States(Cursor cs)
    {
            
    this.cs=cs;
        }

        
    public Cursor getCursor(){
            
    return cs;
        }

    }




    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-08-30 14:40 千里冰封 閱讀(3440) 評論(14)  編輯  收藏 所屬分類: JAVASE

    FeedBack:
    # re: JAVA截屏程序(第二版)
    2007-08-30 17:26 | JAVA面試題
    速度真快,崇拜中。。。。  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-08-30 17:30 | BeanSoft
    支持到死, 呵呵.  回復  更多評論
      
    # re: JAVA截屏程序(第二版)[未登錄]
    2007-08-30 18:25 | Samuel
    哈哈!不錯啊!!
    我上午剛發現的問題這么快就解決了。。

    優化了很多。
    佩服!

    1、希望增加拷貝剪切圖到剪貼板上去的功能,。這樣就可以直接拷貝word中。而不需要另存文件來考取。

    2、希望增加tabpanel來顯示每次截取的圖。并支持對選中的tabpanel中拷貝到剪貼板。。

    慢慢完善功能,一不小心就做一個成熟的軟件來。

    功能一定要小巧,不能過去龐大,否則就操作就不是很方便了。。  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-08-30 21:44 | Pande
    挺有意思的方法,可是能實現的抓取方式太有限了,要做強還得用native的API  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-08-30 23:09 | BeanSoft
    是呀, 上次有人用 SWT 做了個 Native 的, 可惜, 不帶源碼唉... 關于 Robot 類和截屏, 理論上可以做遠程控制了, 參考:
    http://gro.clinux.org/forum/forum.php?forum_id=2597

    Java 遠程控制 1.0 測試版發布  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-08-31 09:49 | Bruce
    public static void main(String args[]){
    new CaptureScreen();
    }
    }
    enum States{
    NORTH_WEST(new Cursor(Cursor.NW_RESIZE_CURSOR)),//表示西北角
    NORTH(new Cursor(Cursor.N_RESIZE_CURSOR)),
    NORTH_EAST(new Cursor(Cursor.NE_RESIZE_CURSOR)),
    EAST(new Cursor(Cursor.E_RESIZE_CURSOR)),
    SOUTH_EAST(new Cursor(Cursor.SE_RESIZE_CURSOR)),
    SOUTH(new Cursor(Cursor.S_RESIZE_CURSOR)),
    SOUTH_WEST(new Cursor(Cursor.SW_RESIZE_CURSOR)),
    WEST(new Cursor(Cursor.W_RESIZE_CURSOR)),
    MOVE(new Cursor(Cursor.MOVE_CURSOR)),
    DEFAULT(new Cursor(Cursor.DEFAULT_CURSOR));
    private Cursor cs;
    States(Cursor cs){
    this.cs=cs;
    }
    老大,我的這個在我這里編譯不通過。。。。是咱回事?  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-08-31 10:46 | 千里冰封
    @Bruce
    可能你那里用的JDK是低于1.5的

    這是枚舉,是JDK1.5新加的功能,你換JDK1.5或者以上的版本試一下吧.現在用JDK1.4的已經很少了  回復  更多評論
      
    # re: JAVA截屏程序(第二版)[未登錄]
    2007-08-31 11:11 | jerry
    private States current=States.DEFAULT;// 表示當前的編輯狀態

    這里執行的時候似乎有點問題,是什么原因?  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-08-31 11:13 | 千里冰封
    @jerry
    一開始的時候,是默認的狀態,這個枚舉就是列舉了一些鼠標的外觀樣式和當前鼠標的狀態.以確實是拖動還是畫圖還是改變大小等等操作  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2007-09-13 15:09 | jht
    # re: JAVA截屏程序(第二版)
    2008-04-25 16:22 | chw
    最好把 運行腳本也一塊打包,否則下了你的jar包后還得自己寫個bat來運行。  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2008-06-03 13:56 | wiloon
    老大,,!你好像只考慮了任務欄在屏幕下方的情況.  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2008-07-29 12:26 | stonebow
    我想問一下,如果對于視頻播放中畫面的獲得應該怎樣操作呢?謝謝  回復  更多評論
      
    # re: JAVA截屏程序(第二版)
    2012-07-03 11:58 | andyyu
    我想問一下,現在的這個程序只能截取屏幕內的圖像。如何進行桌面意外的部分的截屏。  回復  更多評論
      
    主站蜘蛛池模板: 国产免费黄色无码视频| 亚洲开心婷婷中文字幕| 黄色成人网站免费无码av| 中国人xxxxx69免费视频| 一级毛片免费视频| h视频在线免费看| 在线永久看片免费的视频| 91麻豆最新在线人成免费观看| 69国产精品视频免费| 亚洲视频在线免费看| 97性无码区免费| 毛片a级毛片免费播放100| 免费鲁丝片一级观看| 免费看国产精品麻豆| 亚洲国产av一区二区三区| 国产亚洲精品a在线观看| 亚洲女同成av人片在线观看| 久久综合九九亚洲一区| 67pao强力打造67194在线午夜亚洲 | 中文字幕高清免费不卡视频| 狠狠躁狠狠爱免费视频无码 | 91亚洲国产成人久久精品网站| 亚洲国产午夜精品理论片| 色在线亚洲视频www| 亚洲精品色在线网站| 国产vA免费精品高清在线观看| 成人黄网站片免费视频| 4虎永免费最新永久免费地址| 成年人在线免费观看| 亚洲 综合 国产 欧洲 丝袜| 亚洲乱码中文字幕综合| 亚洲色av性色在线观无码| 亚洲乱亚洲乱妇无码| 国产精品高清免费网站| 亚洲黄色免费网站| 精品免费国产一区二区三区| 自拍偷自拍亚洲精品第1页| 2022年亚洲午夜一区二区福利 | 亚洲精品成a人在线观看夫| 亚洲视频在线免费| 2019中文字幕在线电影免费|