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

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

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

    Do you drink java?



          像寫情書一樣coding

     

    [Image] 讀取數碼照片中的EXIF信息

    相信大家都有使用數碼相機拍照的經歷,一張數碼照片可以包含的內容遠遠超過了我們當前觀察到的景物,他可能包括攝影時的光圈、快門、ISO、日期時間等各種與當時攝影條件相關的訊息,相機品牌型號,色彩編碼,拍攝時錄制的聲音以及全球定位系統(GPS)等信息。這些信息都是存放在一個叫做Exif的文件里,然后把Exif文件放置在我們熟知的 JPEG/TIFF 文件的頭部,也就是說 EXIF 信息是鑲嵌在 JPEG/TIFF 圖像文件格式內的一組拍攝參數。

    我在網上找到一個開源的開發工具包Metadata-Extractor,使用它可以像ACDSee等圖像軟件一樣讀取數碼照片的Exif信息。

    我寫了一個小Demo程序演示通過使用metadata-extractor-2.2.2讀取數碼照片的Exif信息并從Exif中讀取圖像縮略圖。
    import?java.io.*;
    import?java.nio.*;
    import?java.nio.channels.*;
    import?java.util.*;

    import?com.drew.imaging.jpeg.*;
    import?com.drew.metadata.*;
    import?com.drew.metadata.exif.*;


    ?
    public?class?ExifExtractor?{
    ??
    public?ExifExtractor()?{
    ??}


    ??
    public?static?void?main(String[]?args)?{
    ????
    try?{
    ??????Metadata?metadata?
    =?JpegMetadataReader.readMetadata(new?File("o_P4140147.JPG.jpg"));

    ??????Iterator?directories?
    =?metadata.getDirectoryIterator();
    ??????
    while?(directories.hasNext())?{
    ????????Directory?directory?
    =?(Directory)?directories.next();

    ????????Iterator?tags?
    =?directory.getTagIterator();
    ????????
    while?(tags.hasNext())?{
    ??????????Tag?tag?
    =?(Tag)?tags.next();

    ??????????
    //?modify?Exif
    //??????????if?(tag.getTagName().equalsIgnoreCase("User?Comment"))?{
    //??????????????????????Directory?exifDirectory?=?metadata.getDirectory(ExifDirectory.class);
    //??????????????????????exifDirectory.setString(tag.getTagType(),?"LeonChen");
    //??????????}

    ??????????
    //?read?thumbnail
    ??????????if?(tag.getTagName().equalsIgnoreCase("Thumbnail?Data"))?{
    ????????????Directory?exifDirectory?
    =?metadata.getDirectory(ExifDirectory.class);

    ????????????
    byte[]?dataBuffer?=?exifDirectory.getByteArray(tag.getTagType());
    ????????????FileChannel?channel?
    =?new?RandomAccessFile(new?File("thumbnail.jpg"),
    ????????????????
    "rw").getChannel();
    ????????????MappedByteBuffer?fileBuffer?
    =?channel.map(FileChannel.MapMode.
    ????????????????READ_WRITE,?
    0,?dataBuffer.length);
    ????????????fileBuffer.put(dataBuffer);
    ????????????fileBuffer.force();
    ????????????channel.close();
    ??????????}


    ??????????
    //?print?exif
    ??????????System.out.println(tag);
    ????????}

    ??????}

    ????}

    ????
    catch?(FileNotFoundException?ex)?{
    ??????ex.printStackTrace();
    ????}

    ????
    catch?(IOException?ex)?{
    ??????ex.printStackTrace();
    ????}

    ????
    catch?(MetadataException?ex)?{
    ??????ex.printStackTrace();
    ????}

    ????
    catch?(JpegProcessingException?ex)?{
    ??????ex.printStackTrace();
    ????}

    ??}

    }


    我在上面的測試程序里注釋了一段代碼,他們可以在內存中修改Exif中某一節點的信息,但是我不知道怎樣才能將修改后的Exif信息保存到文件,如果你知道方法,請給我留言。

    測試圖片下載地址:
    http://www.tkk7.com/images/blogjava_net/leon/2174/o_P4140147.JPG

    EXIF參考:
    http://www.exif.org

    posted @ 2005-11-29 17:04 leon 閱讀(2587) | 評論 (5)編輯 收藏

    [Swing] 布局管理器 - OverlayLayout

    OverlayLayout是用于排列重疊組件的布局管理器。它的用途是以一些對齊的點為基準將一些組件層疊的放置在布局容器中。

    組件的橫軸和縱軸的對齊點介于0.0和1.0之間。橫軸(X軸)上0.0代表組件的左側面,1.0代表組件的右側面;縱軸(Y軸)上0.0和1.0分別代表組件的頂部和底部。

    構造函數
    public OverlayLayout(Container target)

    因為構造函數不會為target對象安裝結果布局管理器,所以我們還必須調用setLayout()來完成此功能。
    JPanel p1 = new JPanel();
    OverlayLayout overlay 
    = new OverlayLayout(p1);
    p1.setLayout(overlay); 

    在OverlayLayout布局管理器中,每個組件都有一對橫縱坐標值,每個組件的位置只和它本身的橫縱坐標值有關,換句話說就是組件以他自己的位置作為基準,橫軸上0.0和1.0分別代表組件的左側面和右側面;縱軸上0.0和1.0分別代表組件的頂部和底部,和容器位置無關。如果一個組件的alignmentX屬性設置為0.5,原本左側面的位置對應0.0,現在變成了0.5,那么,現在組件的位置就要向左移動width/2的距離,使左側面的位置對應現在的0.0??v軸亦是如此,明白了嗎?

    為了容易理解,我們來看《Java Swing》中關于OverlayLayout的一段樣例程序,它可以編譯運行。如圖,你可以在輸入框中調節容器中3個按鈕的X,Y軸的值來看他們在容器中的位置是怎樣改變的,多試幾次,你就可以完全理解OverlayLayout。

    OverlayTest.jpg
    // OverlayTest.java
    // A test of the OverlayLayout manager allowing experimentation.
    //

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class OverlayTest extends JFrame {

        
    public OverlayTest() {
            
    super("OverlayLayout Test");
            setSize(
    500300);
            setDefaultCloseOperation(EXIT_ON_CLOSE);

            
    final Container c = getContentPane();
            c.setLayout(
    new GridBagLayout());

            
    final JPanel p1 = new GridPanel();
            
    final OverlayLayout overlay = new OverlayLayout(p1);
            p1.setLayout(overlay);

            
    final JButton jb1 = new JButton("B1");
            
    final JButton jb2 = new JButton("B2");
            
    final JButton jb3 = new JButton("B3");

            Dimension b1 
    = new Dimension(6050);
            Dimension b2 
    = new Dimension(8040);
            Dimension b3 
    = new Dimension(10060);

            jb1.setMinimumSize(b1);
            jb1.setMaximumSize(b1);
            jb1.setPreferredSize(b1);
            jb2.setMinimumSize(b2);
            jb2.setMaximumSize(b2);
            jb2.setPreferredSize(b2);
            jb3.setMinimumSize(b3);
            jb3.setMaximumSize(b3);
            jb3.setPreferredSize(b3);

            SimpleReporter reporter 
    = new SimpleReporter();
            jb1.addActionListener(reporter);
            jb2.addActionListener(reporter);
            jb3.addActionListener(reporter);

            p1.add(jb1);
            p1.add(jb2);
            p1.add(jb3);

            JPanel p2 
    = new JPanel();
            p2.setLayout(
    new GridLayout(2,6));
            p2.add(
    new JLabel("B1 X", JLabel.CENTER));
            p2.add(
    new JLabel("B1 Y", JLabel.CENTER));
            p2.add(
    new JLabel("B2 X", JLabel.CENTER));
            p2.add(
    new JLabel("B2 Y", JLabel.CENTER));
            p2.add(
    new JLabel("B3 X", JLabel.CENTER));
            p2.add(
    new JLabel("B3 Y", JLabel.CENTER));
            p2.add(
    new JLabel(""));

            
    final JTextField x1 = new JTextField("0.0"4); // Button1 x alignment
            final JTextField y1 = new JTextField("0.0"4); // Button1 y alignment
            final JTextField x2 = new JTextField("0.0"4); 
            
    final JTextField y2 = new JTextField("0.0"4); 
            
    final JTextField x3 = new JTextField("0.0"4); 
            
    final JTextField y3 = new JTextField("0.0"4); 

            p2.add(x1);
            p2.add(y1);
            p2.add(x2);
            p2.add(y2);
            p2.add(x3);
            p2.add(y3);


            GridBagConstraints constraints 
    = new GridBagConstraints();
            c.add(p1, constraints);

            constraints.gridx 
    = 1;
            JButton updateButton 
    = new JButton("Update");
            updateButton.addActionListener(
    new ActionListener() {
                
    public void actionPerformed(ActionEvent ae) {
                    jb1.setAlignmentX(
                        Float.valueOf(x1.getText().trim()).floatValue());
                    jb1.setAlignmentY(
                        Float.valueOf(y1.getText().trim()).floatValue());
                    jb2.setAlignmentX(
                        Float.valueOf(x2.getText().trim()).floatValue());
                    jb2.setAlignmentY(
                        Float.valueOf(y2.getText().trim()).floatValue());
                    jb3.setAlignmentX(
                        Float.valueOf(x3.getText().trim()).floatValue());
                    jb3.setAlignmentY(
                        Float.valueOf(y3.getText().trim()).floatValue());

                    p1.revalidate();
                }

            }
    );
            c.add(updateButton, constraints);

            constraints.gridx 
    = 0;
            constraints.gridy 
    = 1;
            constraints.gridwidth 
    = 2;
            c.add(p2, constraints);
        }


        
    public static void main(String args[]) {
            OverlayTest ot 
    = new OverlayTest();
            ot.setVisible(
    true);
        }


        
    public class SimpleReporter implements ActionListener {
            
    public void actionPerformed(ActionEvent ae) {
                System.out.println(ae.getActionCommand());
            }

        }


        
    public class GridPanel extends JPanel {
            
    public void paint(Graphics g) {
                
    super.paint(g);
                
    int w = getSize().width;
                
    int h = getSize().height;

                g.setColor(Color.red);
                g.drawRect(
    0,0,w-1,h-1);
                g.drawLine(w
    /2,0,w/2,h);
                g.drawLine(
    0,h/2,w,h/2);
            }

        }

    }



    最后提醒,使用OverlayLayout布局管理器關鍵要記住X,Y軸對應組件位置,和容器沒有關系。只要明白這一點,使用還是很簡單方便的,我用OverlayLayout布局管理器clone了一個PhotoShop的工具面板。
    ToolWidget.jpg

    posted @ 2005-11-02 23:08 leon 閱讀(3859) | 評論 (0)編輯 收藏

    [Image] 將屏幕截圖保存成圖像文件

    import ?java.io. * ;
    import ?java.awt. * ;
    import ?java.awt.image. * ;
    import ?javax.imageio. * ;

    public ? class ?CropScreen? {
    ??
    public ? static ? void ?main(String[]?args)? {
    ????
    try ? {
    ??????Toolkit?toolkit?
    = ?Toolkit.getDefaultToolkit();
    ??????Dimension?screenSize?
    = ?toolkit.getScreenSize();
    ??????Rectangle?screenRect?
    = ? new ?Rectangle(screenSize);

    ??????Robot?robot?
    = ? new ?Robot();
    ??????BufferedImage?image?
    = ?robot.createScreenCapture(screenRect);
    ??????ImageIO.write(image,?
    " jpg " ,? new ?File( " screen.jpg " ));
    ????}

    ????
    catch ?(Exception?ex)? {
    ??????ex.printStackTrace();
    ????}

    ??}

    }

    posted @ 2005-10-26 11:39 leon 閱讀(1263) | 評論 (0)編輯 收藏

    [Image] 使用JAI將實現RenderedImage接口的圖像對象序列化

    我們都知道,圖像對象可以編碼成指定圖像格式文件保存在硬盤上,需要時再對其進行解碼讀入內存。但是除了這樣還有別的辦法可以將圖像對象保存在硬盤上嗎?熟悉Java I/O 的人也許可以想到采用對象序列化(Object serialization)試一試,很好,但是如果你研究了 BufferedImage?類的結構后就會大失所望(至少當時我是這樣)。
    BufferedImage.jpg

    BufferedImage?提供一般圖像管理。BufferedImage 對象包括另外兩個對象:Raster 和 ColorModel。Raster 對象包含另外兩個對象:DataBuffer 和 SampleModel。不幸的是,他們都沒有實現序列化所必需的 Serializable 接口,所以無法直接對他們進行對象序列化。

    我在學習 JAI 的時候發現了 javax.media.jai.remote 包里有一個類 SerializableRenderedImage,這個類實現了RenderedImage, Serializable 接口,可以將 RanderedImage 對象作為構造函數的參數實例化一個可以序列化的圖像對象。

    javax.media.jai.remote.SerializableRenderedImage

    public final class SerializableRenderedImage
    extends Object
    implements RenderedImage, Serializable

    SerializableRenderedImage(RenderedImage?source)
    ??????????Constructs a SerializableRenderedImage wrapper for a RenderedImage source.
    SerializableRenderedImage(RenderedImage?source, boolean?useDeepCopy)
    ??????????Constructs a SerializableRenderedImage wrapper for a RenderedImage source.
    SerializableRenderedImage(RenderedImage?source, boolean?useDeepCopy, OperationRegistry?registry, String?formatName, TileCodecParameterList?encodingParam, TileCodecParameterList?decodingParam)
    ??????????Constructs a SerializableRenderedImage wrapper for a RenderedImage source.

    查看JDK的文檔可以知道無論 Java 2D 中的 BufferedImage 還是 JAI 中的 PlanarImage 都實現自 RenderedImage 接口,也就是說所有實現自 RenderedImage 接口的對象均可作為參數包裝出一個 SerializableRenderedImage 類型對象,將其序列化。

    下面是一個簡單的例子說明了這個類的使用方法:

    import?java.io.*;
    import?javax.media.jai.remote.*;

    import?java.awt.image.*;

    public?class?SomeSerializableClass
    ????
    implements?Serializable?{
    ??
    protected?transient?RenderedImage?image;

    ??
    //?Fields?omitted.

    ??
    public?SomeSerializableClass(RenderedImage?image)?{
    ????
    this.image?=?image;
    ??}


    ??
    //?Methods?omitted.

    ??
    //?Serialization?method.
    ??private?void?writeObject(ObjectOutputStream?out)?throws?IOException?{
    ????out.defaultWriteObject();
    ????out.writeObject(
    new?SerializableRenderedImage(image,?true));
    ??}


    ??
    //?Deserialization?method.
    ??private?void?readObject(ObjectInputStream?in)?throws?IOException,
    ??????ClassNotFoundException?
    {
    ????in.defaultReadObject();
    ????image?
    =?(RenderedImage)?in.readObject();
    ??}

    }

    posted @ 2005-10-18 17:36 leon 閱讀(2834) | 評論 (1)編輯 收藏

    [Image] AWT使用ImageProducer/ImagConsumer模式加載和顯示圖像的原理

    以前寫過2篇關于AWT中圖像加載顯示方法的文章,最近又多了一些對于 ImageProducer / ImagConsumer 模式的一些理解,嘗試著用文字總結了一下,接著還想再寫一篇介紹 AWT 中圖像過濾的原理和方法。你可能認為現在學習 AWT 中的成像方法對于開發中已經沒有太大的意義,因為已經有了 Java 2D 和 JAI ,但是我在實際工作中感到還是無法完全離開 AWT,特別是在一些基本的應用上。而且我覺得理解 AWT 的 Producer / Consumer (push) model 對于理解 Java 2D 的 Immediate mode model 和 JAI 的 Pipeline (pull) model 的都是有好處的。

    因為水平有限,這方面學習資料相對也不豐富,我也不知道我的理解或想法是否完全正確或者表述清楚,感興趣的朋友可以當作學習參考,希望能夠和我聯系進行進一步的討論。



    AWT 使用 ImageProducer / ImagConsumer 模式,支持加載和顯示 GIF 圖像文件格式和 JPEG 圖像文件格式。因為圖像的加載和顯示是異步方式進行的,所以有大量加載和顯示的技術。

    在 AWT 中,提供了一個 java.awt.Image 類。java.awt.Image 類代表一個圖像對象被作為參數傳遞給其他用來顯示和處理圖像的其他 AWT 對象使用。例如,通過調用 Graphics.drawImage(java.awt.Image, int, int, ImageObserver) 方法,可以在組件中畫出圖像。

    java.awt.Image 是一個定義方法的抽象類,它定義的方法提供的對圖像信息的訪問。而創建和處理圖像的基本結構則在 java.awt.image 包中。注意,這里不要和 java.awt.Image 發生混淆。

    AWT? 加載和顯示圖像使用的是 ImageProducer / ImagConsumer 模式,我們必須了解3個術語,ImageProducer(圖像生產者),ImageConsumer(圖像消費者)和ImageObserver(圖像觀察者)。

    ImageProducer 負責生產圖像的位,ImagConsumer 接受圖像的位,ImageObserver 監視 ImageProducer 的圖像生產過程。ImageProducer 生產傳遞給 ImagConsumer 與圖像相關的位。因為圖像生產過程是異步進行的,并不是一次性生產所有圖像位,所以當 ImageProducer 加載圖像時,ImageObserver 用來監視它的進展情況。因為 java.awt.Component 實現了 ImageObserver 接口,所以 AWT 中的每個組件都可以是ImageObserver,當一個給定的 ImageProducer 進行異步操作時,這個 ImageObserver 可以選擇是否被更新。java.awt.image 包為 ImageProducer,ImagConsumer 和 ImageObserver 都定義了接口。

    ImageProducer
    和圖像相關的位并不存儲在 java.awt.Image 中,每個圖像都維護一個和一個 ImageProducer?的關聯。這個 ImageProducer?的責任是生產圖像的位并將它們傳送給 ImagConsumer,用于過濾該圖像。

    java.awt.image軟件包中,FilteredImageSource(被過濾的圖像源)和 MemoryImageSource(內存的圖像源)實現了 ImageProducer? 接口,是 ImageProducer?。


    ImagConsumer
    java.awt.image軟件包中,ImageFilter(圖像過濾器)和 PixelGrabber(像素抓取器)實現了 ImagConsumer 接口,是 ImagConsumer。


    ImageProducer?和 ImagConsumer 的詳細介紹請閱讀 使用 ImageProducer? / ImagConsumer 進行圖像過濾


    ImageObserver
    ImageObserver接口中,定義了一個常數集合和一個方法:

    public boolean imageUpdate(image img, int flags, int x, int y, int width, int height);

    ImageObserver的常數
    標志 含義
    ABORT 圖像加載被中斷
    ALLBITS 所有的位都已加載給圖像
    ERROR 在加載過程中發生錯誤
    FRAMEBITS 多幀圖像的一個幀被傳送,一般用于GIF
    HEIGHT 圖像的高度已經可用
    PROPERTIES 圖像的屬性已經可用
    SOMEBITS 圖像的縮放變體的多個位已經可用
    WIDTH 圖像的寬度已經可用

    參數 flags 的作用是通知圖像觀察者圖像生產的進展情況。這些常數代表傳遞給 ImageObserver.imageUpdate() 的 flags 參數中的位。

    當 Component 作為 ImageObserver 時,一旦圖像有新的部分被加載,就會調用 Component.imageUpdate() 方法,imageUpdate() 再調用 repaint() 重新繪制圖像。repaint() 將先調用 update() 方法清除組件背景,再由 update() 方法調用 paint() 方法繪制圖像。我們可以通過重載 imageUpdate() 方法控制組件何時被更新,重載 update() 方法控制是否每次重繪都要清除背景圖像(每次重繪都清除背景圖像會造成畫面閃爍)。


    為了更好的理解,下面我們來看幾個樣例程序:

    例1,圖像位在需要之前不被生產

    import?java.net.URL;
    import?java.applet.Applet;
    import?java.awt.Graphics;
    import?java.awt.Image;

    public?class?ImageTestAppletSimple?extends?Applet{
    ????
    private?Image?im;
    ????
    ????
    public?void?init(){
    ????????URL?codebase?
    =?getCodeBase();
    ????????System.out.println(codebase);
    ????????
    ????????im?
    =?getImage(codebase,"flower.jpg");
    ????????
    ????????System.out.print(
    "Image?width?=?"?+?im.getWidth(this));
    ????????System.out.println(
    " hight?=?"?+?im.getHeight(this));
    ????}

    ????
    ????
    public?void?paint(Graphics?g){
    ????????g.drawImage(im,
    0,0,this);
    ????}

    }

    輸出結果:
    image width = -1 height = -1

    圖像的高度和寬度只有在圖像被完全加載后才是有效的,輸出結果說明 java.awt.image 相關的圖像位在需要之前不被生產。


    例2,圖像異步生產

    import?java.net.URL;
    import?java.applet.Applet;
    import?java.awt.Graphics;
    import?java.awt.Image;

    public?class?ImageTestAppletSimple2?extends?Applet{
    ????
    private?Image?im;
    ????
    ????
    public?void?init(){
    ????????im?
    =?getImage(getCodeBase(),"flower.jpg");
    ????}

    ????
    ????
    public?void?paint(Graphics?g){
    ????????System.out.println(
    "drawing?image...");
    ????????System.out.println(g.drawImage(im,
    0,0,this));
    ????}

    }

    輸出結果:
    drawing?image...
    false
    drawing?image...
    false
    drawing?image...
    false
    drawing?image...
    true

    輸出結果說明組件作為 ImageObserver ,監視 ImageProducer 異步生產圖像,一旦有新的圖像位被生產時就重繪圖像,圖像完全加載后 drawImage() 方法返回 true。


    例3,重載 ImageObserver 的 imageUpdate() 方法,在圖像完全加載前不調用 repaint()

    import?java.applet.Applet;
    import?java.awt.Graphics;
    import?java.awt.Image;

    public?class?ImageTestAppletWithUpdate?extends?Applet{
    ????
    private?Image?im;
    ????
    ????
    public?void?init(){
    ????????im?
    =?getImage(getCodeBase(),"flower.jpg");
    ????????
    ????????System.out.print(
    "Image?width?=?"?+?im.getWidth(this));
    ????????System.out.println(
    "hight?=?"?+?im.getHeight(this));
    ????}

    ????
    ????
    public?void?paint(Graphics?g){
    ????????g.drawImage(im,
    0,0,this);
    ????}

    ????
    ????
    public?boolean?imageUpdate(Image?image,int?flags,int?x,int?y,int?w,int?h){
    ????????System.out.println(
    "imageUpdate():x="?+?x?+?",y="?+?y?+?",w="?+?w?+?",h="?+?h);
    ????????
    ????????
    if((flags?&?ALLBITS)?==?0)
    ????????????
    return?true;
    ????????
    else
    ????????
    {
    ????????????repaint();
    ????????????
    return?false;
    ????????}

    ????}

    }



    例4,重載? Component.update() 方法,被調用時不清除背景圖像,直接調用 paint() 方法繪制圖像,消除閃爍

    import?java.applet.Applet;
    import?java.awt.Graphics;
    import?java.awt.Image;

    public?class?ImageTestAppletWithSmoothDynamicUpdate?extends?Applet{
    ????
    private?Image?im;
    ????
    ????
    public?void?init(){
    ????????im?
    =?getImage(getCodeBase(),"hl.jpg");
    ????????
    ????????System.out.print(
    "Image?width?=?"?+?im.getWidth(this));
    ????????System.out.println(
    "hight?=?"?+?im.getHeight(this));
    ????}

    ????
    ????
    public?void?paint(Graphics?g){
    ????????g.drawImage(im,
    0,0,this);
    ????}

    ????
    ????
    public?boolean?imageUpdate(Image?image,int?flags,int?x,int?y,int?w,int?h){
    ????????System.out.println(
    "imageUpdate():x="?+?x?+?",y="?+?y?+?",w="?+?w?+?",h="?+?h);
    ????????
    ????????repaint();
    ????????
    ????????
    if((flags?&?ALLBITS)?==?0)
    ????????????
    return?true;
    ????????
    else
    ????????????
    return?false;
    ????}

    ????
    ????
    public?void?update(Graphics?g){
    ????????paint(g);
    ????}

    }

    ?

    posted @ 2005-10-11 10:35 leon 閱讀(2622) | 評論 (3)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 

    導航

    統計

    公告

    DSC_0106.jpg
    本博客已經搬家到CSDN
    http://blog.csdn.net/chenweionline




    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    About Technology

    My Favorite Website

    搜索

    積分與排名

    最新評論

    • 1.?re: 胃痙攣
    • 兄弟們你們都做胃鏡了嗎開的啥藥?有什么養胃秘方???請賜教啊!
    • --我也進來了
    • 2.?re: 胃痙攣
    • @痛啊
      我感覺比生孩子還疼,生孩子還能有意識呢!這種疼還叫不出來連說話的力氣都沒了
    • --我也進來了
    • 3.?re: 胃痙攣
    • 評論內容較長,點擊標題查看
    • --我也進來了
    • 4.?re: 胃痙攣
    • 我都周期性的發作,算來有4年了 。每年最少一次,一次最少2天。吃了好多藥就差沒去做胃鏡了。 剛剛發作就隨便煮了點姜湯喝下就好了些,不知道還會不會發作了。
    • --許家洛
    • 5.?re: 胃痙攣
    • 我昨晚也疼的要死。。上次疼的直接120送醫院了,一上120我竟然就不疼了,醫院里掉了瓶鹽水就放回家了。這次正好國外旅游中,幾乎疼了一整晚,整個在床上翻滾狀態了。今天不疼了,就是整個人難受。。。求助阿
    • --胃疼
    • 6.?re: [Swing]在 JFileChooser 中進行文件驗證的小技巧
    • 輸入*還是會有問題
    • --ngh
    • 7.?re: 胃痙攣[未登錄]
    • 昨晚一夜的身不如死的感覺,胃痙攣兄不要來了吧 ,求你了
    • --李飛
    • 8.?re: 胃痙攣
    • 評論內容較長,點擊標題查看
    • --daidai
    • 9.?re: 胃痙攣
    • 評論內容較長,點擊標題查看
    • --痛啊
    • 10.?re: 胃痙攣
    • 媽啊 痛的快死了~!第一次感覺過這樣的痛啊~!和女的生孩子有的一比了吧~!哭哭哭~!
    • --痛啊

    閱讀排行榜

    主站蜘蛛池模板: 亚洲va在线va天堂va不卡下载| 国产亚洲情侣久久精品| 久久精品国产亚洲AV无码偷窥| 国产AV无码专区亚洲精品| 亚洲七七久久精品中文国产| 亚洲综合日韩久久成人AV| 国产亚洲一区二区手机在线观看| 亚洲电影在线播放| 美女啪啪网站又黄又免费| 免费观看一区二区三区| 在线永久免费的视频草莓| 俄罗斯极品美女毛片免费播放| 国产亚洲精品看片在线观看| 亚洲日韩国产精品无码av| 西西人体大胆免费视频| 99精品视频在线视频免费观看| 亚洲欧洲免费无码| 亚洲成人激情在线| 高清免费久久午夜精品| 国产片AV片永久免费观看| 亚洲精品字幕在线观看| 亚洲av中文无码字幕色不卡 | 亚洲国产天堂在线观看| 亚洲精品欧美综合四区| 国产性生大片免费观看性| 免费鲁丝片一级观看| 色噜噜亚洲男人的天堂| 无码av免费一区二区三区试看| 亚洲精品无码你懂的网站| 亚洲一区二区三区成人网站| 亚洲电影免费观看| 久久久久久a亚洲欧洲AV| 两个人看的www免费高清| 亚洲国产专区一区| 免费人人潮人人爽一区二区 | 18成禁人视频免费网站| 久久亚洲国产精品一区二区| 久久免费国产精品| 在线观看亚洲天天一三视| 久久国产免费直播| 亚洲国产精品VA在线观看麻豆|