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

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

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

    java技術研究

    統計

    留言簿(3)

    閱讀排行榜

    評論排行榜

    #

    將白色背景圖片變透明(轉自csdn)

         摘要: [java:showcolumns] view plaincopy·········10········20········30·...  閱讀全文

    posted @ 2012-04-28 09:50 小秦 閱讀(1403) | 評論 (0)編輯 收藏

    Java數字圖像處理基礎知識 - 必讀(轉自javaeye)



     

    寫了很多篇關于圖像處理的文章,沒有一篇介紹Java 2D的圖像處理API,文章討論和提及的

    API都是基于JDK6的,首先來看Java中如何組織一個圖像對象BufferedImage的,如圖:


    一個BufferedImage的像素數據儲存在Raster中,ColorModel里面儲存顏色空間,類型等

    信息,當前Java只支持一下三種圖像格式- JPG,PNG,GIF,如何向讓Java支持其它格式,首

    先要 完成Java中的圖像讀寫接口,然后打成jar,加上啟動參數- Xbootclasspath/p

    newimageformatIO.jar即可。

     

    Java中如何讀寫一個圖像文件,使用ImageIO對象即可。讀圖像文件的代碼如下:

     

    1. File file = new File("D:\\test\\blue_flower.jpg");  
    2. BufferedImage image = ImageIO.read(file);  

     

    寫圖像文件的代碼如下:

     

    1. File outputfile = new File("saved.png");  
    2. ImageIO.write(bufferedImage, "png",outputfile);  

     

    從BufferedImage對象中讀取像素數據的代碼如下:

    1. int type= image.getType();  
    2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )  
    3.      return (int [])image.getRaster().getDataElements(x, y, width, height, pixels );  
    4. else  
    5.     return image.getRGB( x, y, width, height, pixels, 0, width );  

     

    首先獲取圖像類型,如果不是32位的INT型數據,直接讀寫RGB值即可,否則需要從Raster

    對象中讀取。

     

    往BufferedImage對象中寫入像素數據同樣遵守上面的規則。代碼如下:

     

    1. int type= image.getType();  
    2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )  
    3.    image.getRaster().setDataElements(x, y, width, height, pixels );  
    4. else  
    5.    image.setRGB(x, y, width, height, pixels, 0, width );  


     

    讀取圖像可能因為圖像文件比較大,需要一定時間的等待才可以,Java Advance Image

    Processor API提供了MediaTracker對象來跟蹤圖像的加載,同步其它操作,使用方法如下:

    1. MediaTracker tracker = new MediaTracker(this); //初始化對象  
    2. tracker.addImage(image_01, 1); // 加入要跟蹤的BufferedImage對象image_001  
    3. tracker.waitForID(110000) // 等待10秒,讓iamge_01圖像加載  

     

    從一個32位int型數據cARGB中讀取圖像RGB顏色值的代碼如下:

     

    1. int alpha = (cARGB >> 24)& 0xff; //透明度通道  
    2. int red = (cARGB >> 16) &0xff;  
    3. int green = (cARGB >> 8) &0xff;  
    4. int blue = cARGB & 0xff;  

     

    將RGB顏色值寫入成一個INT型數據cRGB的代碼如下:

     

    1. cRGB = (alpha << 24) | (red<< 16) | (green << 8) | blue;  

     

    創建一個BufferedImage對象的代碼如下:

     

    1. BufferedImage image = newBufferedImage(256256, BufferedImage.TYPE_INT_ARGB);  

     

    一個完整的源代碼Demo如下:

     

    1. package com.gloomyfish.swing;  
    2.   
    3. import java.awt.BorderLayout;  
    4. import java.awt.Dimension;  
    5. import java.awt.Graphics;  
    6. import java.awt.Graphics2D;  
    7. import java.awt.RenderingHints;  
    8. import java.awt.image.BufferedImage;  
    9. import java.io.File;  
    10. import java.io.IOException;  
    11.   
    12. import javax.imageio.ImageIO;  
    13. import javax.swing.JComponent;  
    14. import javax.swing.JFrame;  
    15.   
    16. public class PlasmaDemo extends JComponent {    
    17.     
    18.     /**  
    19.      *   
    20.      */    
    21.     private static final long serialVersionUID = -2236160343614397287L;    
    22.     private BufferedImage image = null;    
    23.     private int size = 256;  
    24.         
    25.     public PlasmaDemo() {    
    26.         super();    
    27.         this.setOpaque(false);    
    28.     }    
    29.         
    30.     protected void paintComponent(Graphics g) {    
    31.         Graphics2D g2 = (Graphics2D)g;    
    32.         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);    
    33.         g2.drawImage(getImage(), 55, image.getWidth(), image.getHeight(), null);    
    34.     }    
    35.         
    36.     private BufferedImage getImage() {    
    37.         if(image == null) {    
    38.             image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);    
    39.             int[] rgbData = new int[size*size];    
    40.             generateNoiseImage(rgbData);    
    41.             setRGB(image, 00, size, size, rgbData);  
    42.             File outFile = new File("plasma.jpg");  
    43.             try {  
    44.                 ImageIO.write(image, "jpg", outFile);  
    45.             } catch (IOException e) {  
    46.                 e.printStackTrace();  
    47.             }  
    48.         }    
    49.         return image;    
    50.     }    
    51.         
    52.     public void generateNoiseImage(int[] rgbData) {    
    53.         int index = 0;    
    54.         int a = 255;    
    55.         int r = 0;    
    56.         int g = 0;    
    57.         int b = 0;    
    58.    
    59.         for(int row=0; row<size; row++) {    
    60.             for(int col=0; col<size; col++) {    
    61.                 // set random color value for each pixel    
    62.                 r = (int)(128.0 + (128.0 * Math.sin((row + col) / 8.0)));    
    63.                 g = (int)(128.0 + (128.0 * Math.sin((row + col) / 8.0)));    
    64.                 b = (int)(128.0 + (128.0 * Math.sin((row + col) / 8.0)));    
    65.                     
    66.                 rgbData[index] = ((clamp(a) & 0xff) << 24) |    
    67.                                 ((clamp(r) & 0xff) << 16)  |    
    68.                                 ((clamp(g) & 0xff) << 8)   |    
    69.                                 ((clamp(b) & 0xff));    
    70.                 index++;    
    71.             }    
    72.         }    
    73.             
    74.     }    
    75.         
    76.     private int clamp(int rgb) {    
    77.         if(rgb > 255)    
    78.             return 255;    
    79.         if(rgb < 0)    
    80.             return 0;    
    81.         return rgb;    
    82.     }      
    83.     
    84.     public void setRGB( BufferedImage image, int x, int y, int width, int height, int[] pixels ) {    
    85.         int type = image.getType();    
    86.         if ( type == BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )    
    87.             image.getRaster().setDataElements( x, y, width, height, pixels );    
    88.         else    
    89.             image.setRGB( x, y, width, height, pixels, 0, width );    
    90.     }    
    91.         
    92.     public static void main(String[] args) {    
    93.         JFrame frame = new JFrame("Noise Art Panel");    
    94.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    95.         frame.getContentPane().setLayout(new BorderLayout());    
    96.             
    97.         // Display the window.    
    98.         frame.getContentPane().add(new PlasmaDemo(), BorderLayout.CENTER);    
    99.         frame.setPreferredSize(new Dimension(400 + 25,450));    
    100.         frame.pack();    
    101.         frame.setVisible(true);    
    102.     }    
    103. }    

     

    posted @ 2012-04-26 16:56 小秦 閱讀(717) | 評論 (0)編輯 收藏

    【轉】windows下mysql日志開啟與查詢

    修改 my.ini文件
    加入以下語句(在沒有設置的前提下)
    log-error=d:/log/mysql/mysql_log_err.txt
    log=d:/log/mysql/mysql_log.txt
    #log-bin=d:/log/mysql/mysql_log_bin
    log-slow-queries= d:/log/mysql/mysql_log_slow.txt

    使用以下命令查看是否啟用了日志

    mysql>show variables like ’log_%’;

    其他:
    參考:http://www.phpfans.net/article/htmls/201008/MjkzMTE0.html

    1.
    錯誤日志 記錄啟動、運行或停止mysqld時出現的問題。
    My.ini配置信息:
    #Enter a name for the error log file. Otherwise a default name will be used.
    #log-error=d:/mysql_log_err.txt
    2.
    查詢日志 記錄建立的客戶端連接和執行的語句。
    My.ini配置信息:
    #Enter a name for the query log file. Otherwise a default name will be used.
    #log=d:/mysql_log.txt
    3.
    更新日志 記錄更改數據的語句。不贊成使用該日志。
    My.ini配置信息:
    #Enter a name for the update log file. Otherwise a default name will be used.
    #log-update=d:/mysql_log_update.txt
    4.
    二進制日志 記錄所有更改數據的語句。還用于復制。
    My.ini配置信息:
    #Enter a name for the binary log. Otherwise a default name will be used.
    #log-bin=d:/mysql_log_bin
    5.
    慢日志 記錄所有執行時間超過long_query_time秒的所有查詢或不使用索引的查詢。
    My.ini配置信息:
    #Enter a name for the slow query log file. Otherwise a default name will be used.
    #long_query_time =1

    #log-slow-queries= d:/mysql_log_slow.txt 

    posted @ 2012-04-20 20:52 小秦 閱讀(3807) | 評論 (0)編輯 收藏

    Spring中Quartz定時程序執行兩次(轉)


    請看下面這段配置就是錯誤的: 

    <Host name="www.***.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 
    <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" /> 
    <Context path="" docBase="/tomcat/webapps/***" debug="1" /> 
    <Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" /> 
    </Host> 


    正確的配置如下 

    <Host name="www.***.com" debug="0" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 
    <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" /> 
    <Context path="" docBase="/tomcat/webapps/***" debug="1" /> 
    <Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" /> 
    </Host> 
    這兩段的區別是第二段去除了appBase="webapps"中的webapps變成了appBase="",因為web應用程序都是放在 webapps這個目錄下的,如果不把“webapps“去掉,這里會調用一次quartz的任務調度,在接下來的“<Context path”中又會調用一次quartz的任務調度,所以就重復了2次

    posted @ 2012-04-20 16:45 小秦 閱讀(1765) | 評論 (0)編輯 收藏

    tomcat啟動2次應用

    tomcat中三種部署項目的方法
    第一種方法:在tomcat中的conf目錄中,在server.xml中的,<host/>節點中添加: 
    <Context path="/hello" docBase="D:eclipse3.2.2forwebtoolsworkspacehelloWebRoot" debug="0" privileged="true"> 
    </Context> 
    至于Context 節點屬性,可詳細見相關文檔。 
    第二種方法:將web項目文件件拷貝到webapps 目錄中。 
    第三種方法:很靈活,在conf目錄中,新建 Catalina(注意大小寫)\localhost目錄,在該目錄中新建一個xml文件,名字可以隨意取,只要和當前文件中的文件名不重復就行了,該xml文件的內容為: 
    <Context path="/hello" docBase="D:eclipse3.2.2forwebtoolsworkspacehelloWebRoot" debug="0" privileged="true"> 
    </Context> 
    第3個方法有個優點,可以定義別名。服務器端運行的項目名稱為path,外部訪問的URL則使用XML的文件名。這個方法很方便的隱藏了項目的名稱,對一些項目名稱被固定不能更換,但外部訪問時又想換個路徑,非常有效。 
    第2、3還有優點,可以定義一些個性配置,如數據源的配置等。 
    還有一篇 詳細的 
    此處主要講述Tomcat部署發布JSP應用程序的三種方法 
        1、直接放到Webapps目錄下 
         Tomcat的Webapps目錄是Tomcat默認的應用目錄,當服務器啟動時,會加載所有這個目錄下的應用。也可以將JSP程序打包成一個 war包放在目錄下,服務器會自動解開這個war包,并在這個目錄下生成一個同名的文件夾。一個war包就是有特性格式的jar包,它是將一個Web程序的所有內容進行壓縮得到。具體如何打包,可以使用許多開發工具的IDE環境,如Eclipse、NetBeans、ant、JBuilder等。也可以用 cmd 命令:jar -cvf applicationname.war package.*; 
    甚至可以在程序執行中打包: 
    try{ 
    string strjavahome = system.getproperty("java.home"); 
    strjavahome = strjavahome.substring(0,strjavahome.lastindexof(\\))+"\\bin\\"; 
    runtime.getruntime().exec("cmd /c start "+strjavahome+"jar cvf hello.war c:\\tomcat5.0\\webapps\\root\\*"); 
    }  
    catch(exception e){system.out.println(e);} 
         webapps這個默認的應用目錄也是可以改變。打開Tomcat的conf目錄下的server.xml文件,找到下面內容: 
    <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeloy="true" xmlValidation="falase" xmlNamespaceAware="false"> 
       2、在server.xml中指定 
         在Tomcat的配置文件中,一個Web應用就是一個特定的Context,可以通過在server.xml中新建Context里部署一個JSP應用程序。打開server.xml文件,在Host標簽內建一個Context,內容如下。 
    <Context path="/myapp" reloadable="true" docBase="D:\myapp" workDir="D:\myapp\work"/> 
         其中path是虛擬路徑,docBase是JSP應用程序的物理路徑,workDir是這個應用的工作目錄,存放運行是生成的于這個應用相關的文件。 
       3、創建一個Context文件 
         以上兩種方法,Web應用被服務器加載后都會在Tomcat的conf\catalina\localhost目錄下生成一個XML文件,其內容如下: 
    <Context path="/admin" docBase="${catalina.home}/server/webapps/admin" debug="0" privileged="true"></Context> 
    可以看出,文件中描述一個應用程序的Context信息,其內容和server.xml中的Context信息格式是一致的,文件名便是虛擬目錄名。您可以直接建立這樣的一個xml文件,放在Tomcat的conf\catalina\localhost目錄下。例子如下: 
    注意:刪除一個Web應用同時也要刪除webapps下相應的文件夾禍server.xml中相應的Context,還要將Tomcat的conf 
    \catalina\localhost目錄下相應的xml文件刪除。否則Tomcat仍會岸配置去加載。。。


    所以項目最好不要放在webapps下,然后又跑去server.xml下或者catalina目錄下再配置一遍,這樣就會同時啟動2次同一個應用。如果應用中有job,這樣會造成并發。

    posted @ 2012-04-20 16:36 小秦 閱讀(2438) | 評論 (1)編輯 收藏

    spring quartz使用多線程并發“陷阱”(轉)

    定義一個job:ranJob,設置每秒執行一次,設置不允許覆蓋并發執行

     

    Xml代碼  
    1. <bean id="rankJob" class="com.chinacache.www.logstat.job.RankJob" />  
    2. <bean id="rankJobDetail"  
    3.     class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
    4.     <property name="targetObject" ref="rankJob" />  
    5.     <property name="targetMethod" value="execute" />  
    6.     <property name="concurrent" value="<span style="color: #ff0000;"><strong>false</strong></span>/>  
    7. </bean>  
    8. <bean id="rankJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
    9.     <property name="jobDetail" ref="rankJobDetail" />  
    10.     <!-- 單位 ms,半小時 1800000 ms -->  
    11.     <property name="repeatInterval" value="<span style="color: #ff0000;"><strong>1000</strong></span>/>  
    12. </bean>  

     

    job代碼:

    Java代碼  
    1. System.out.println("Start job");  
    2. ExecutorService exec = Executors.newFixedThreadPool(1);  
    3.   
    4. Thread thread = new Thread(new Runnable() {  
    5.     @Override  
    6.     public void run() {  
    7.         System.out.println("thread start");  
    8.         try {  
    9.             Thread.sleep(3000);  
    10.         } catch (InterruptedException e) {  
    11.             // TODO Auto-generated catch block  
    12.             e.printStackTrace();  
    13.         }  
    14.         System.out.println("thread end");  
    15.     }  
    16. });  
    17. exec.execute(thread);  
    18. System.out.println("end job");  

     

    程序輸出結果:

    Java代碼  
    1. Start job  
    2. end job  
    3. <span style="color: #ff0000;"><strong>thread start</strong></span>  
    4. Start job  
    5. end job  
    6. thread start  
    7. Start job  
    8. end job  
    9. thread start  
    10. Start job  
    11. end job  
    12. thread start  
    13. <strong><span style="color: #ff0000;">thread end</span></strong>  

     

    從結果可以看到,job的并發覆蓋配置似乎根本沒有生效,原因是:job沒有關注多線程執行情況

    修改job代碼,添加如下代碼在job訪問最后,線程處理完job才結束,

     

    Java代碼  
    1. while (!exec.isTerminated()) {  
    2.     // 等待所有子線程結束,才退出主線程  
    3. }  

     

    修改代碼后程序結果:

    Java代碼  
    1. Start job  
    2. thread start  
    3. thread end  

     

    可以看到job始終沒有結束,說明ExecutorService始終沒有終止,看看文檔,加入shutdonw()方法,job所有代碼如下:

    Java代碼  
    1. public void execute() throws InterruptedException {  
    2.     System.out.println("Start job");  
    3.     ExecutorService exec = Executors.newFixedThreadPool(1);  
    4.       
    5.     Thread thread = new Thread(new Runnable() {  
    6.         @Override  
    7.         public void run() {  
    8.             System.out.println("thread start");  
    9.             try {  
    10.                 Thread.sleep(3000);  
    11.             } catch (InterruptedException e) {  
    12.                 // TODO Auto-generated catch block  
    13.                 e.printStackTrace();  
    14.             }  
    15.             System.out.println("thread end");  
    16.         }  
    17.     });  
    18.     exec.execute(thread);  
    19.     exec.shutdown();  
    20.        while (!exec.isTerminated()) {  
    21.            // 等待所有子線程結束,才退出主線程  
    22.        }          
    23.     System.out.println("end job");  
    24. }  

     

    打印結果如下:

     

    Java代碼  
    1. Start job  
    2. thread start  
    3. thread end  
    4. end job  
    5.   
    6. Start job  
    7. thread start  
    8. thread end  
    9. end job  
    10.   
    11. Start job  
    12. thread start  
    13. thread end  
    14. end job  

     

     

    OK,至此spring quartz多線程并發問題解決。回顧下,我們要使用isTerminated()方法等多線程結束后在結束job;多線程任務派發結束后,要使用shutdown()方法順序關閉線程(等待正在執行任務,不接受新任務)

    posted @ 2012-04-19 14:15 小秦 閱讀(8124) | 評論 (1)編輯 收藏

    清除浮動引起的bug

    <div class="clearLine"></div>
    這段用來清除浮動
    得要寫在最下面,不可以寫在兩段div的中間,否則就會錯位。

    posted @ 2012-04-18 16:27 小秦 閱讀(181) | 評論 (0)編輯 收藏

    Spring+hibernate 配置quartz后,quartz執行的程序無法釋放連接是什么原因?

    有個bean命名不在指定的攔截范圍內,沒被事務攔截器攔截,所以沒有關閉連接了。 
    <bean id="mailEngine" parent="txProxyTemplate">
    以前沒有配置parent,所以不在spring的事務監管之列。

    posted @ 2012-04-16 11:16 小秦 閱讀(971) | 評論 (0)編輯 收藏

    quartz多個線程同時處理一條記錄的問題。

    因為當save時,會出錯就表示鎖了。
    比如下面的方法,要catch一下,如果保存報錯,就表示另一個線程保存的時候鎖住了。
    public List<MailQueue> updateStatusAndFindMailList(int numOfEmailsPerTime) {
    List<MailQueue> list = this.mailQueueDao.findMailListAndLock(numOfEmailsPerTime);
    for(MailQueue mailQueue:list){
    try{
    mailQueue.setSendStatus(MailQueue.STATUS_SENDING);
    this.saveOrUpdate(mailQueue);
    }catch(Exception e){
    //如果保存失敗,表示是給另一個線程保存了。
    list.remove(mailQueue);
    }
    }
    return list;
    }

    posted @ 2012-04-12 13:18 小秦 閱讀(538) | 評論 (0)編輯 收藏

    filter與redirect引起的 IllegalStateException問題

    在response.sendRedirect()方法后加return語句即可,如下:
    response.sendRedirect("index.jsp");
    return;

    原因是:在程序中兩次調用了response.sendRedirect()方法。

    jdk5.0文檔中很清楚地介紹了出現IllegalStateException異常的可能情況:

    1)同一個頁面中再次調用response.sendRedirect()方法。
    2)提交的URL錯誤,即不是個有效的URL。

    filter中多次chain.doFilter(request, response);也會這樣,要保證一個filter只進行一次doFilter

    java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:405)
    at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:779)
    at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:385)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at com.ebizer.framework.star.filter.CoreUrlRewriteFilter.doFilterInternal(CoreUrlRewriteFilter.java:120)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:581)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1293)
    at java.lang.Thread.run(Thread.java:595)

    posted @ 2012-04-11 12:00 小秦 閱讀(1766) | 評論 (0)編輯 收藏

    僅列出標題
    共11頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 
    主站蜘蛛池模板: 18国产精品白浆在线观看免费| 东方aⅴ免费观看久久av| 91精品国产免费久久国语麻豆| 亚洲AV无码一区二区二三区软件| 一区二区三区免费视频播放器 | 37pao成人国产永久免费视频| 国产偷v国产偷v亚洲高清| 人成免费在线视频| 亚洲性日韩精品一区二区三区| 国产精品综合专区中文字幕免费播放| 亚洲AV无码乱码在线观看牲色| 免费一级毛片在线播放放视频| 亚洲五月午夜免费在线视频| 91精品成人免费国产| 亚洲AV成人片色在线观看| 久久免费国产视频| 亚洲日本在线播放| 岛国av无码免费无禁网站| 国产精品久久久久久亚洲小说| 亚洲精品成人片在线观看| 国产情侣久久久久aⅴ免费 | 国产男女猛烈无遮挡免费视频| 曰批全过程免费视频免费看 | 国产精品国产亚洲区艳妇糸列短篇 | 亚洲AⅤ永久无码精品AA| 国产VA免费精品高清在线| 亚洲精品国产美女久久久| 亚洲精品免费在线视频| 亚洲国产精品网站在线播放| 亚洲国产人成精品| 99久久免费精品高清特色大片| 亚洲中文字幕一二三四区| 亚洲人成人无码网www国产| 久久精品国产大片免费观看| 亚洲综合无码无在线观看| 亚洲综合国产精品第一页| 国内精自视频品线六区免费| 黄色毛片视频免费| 99久久亚洲精品无码毛片| 免费看美女被靠到爽的视频| 免费一级毛片无毒不卡|