青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

GDI Bitmaps and Device-Independent Bitmaps 操作

DIB(Device-Independent Bitmap,設備無關位圖)小知識

            作者:顧勝元 湯澤江 陳載春

 

位圖簡介

 

位圖一共有兩種類型,分別為:設備相關位圖(DDBDevice-Dependent Bitmap)和設備無關位圖(DIBDevice-Independent Bitmap)。GDI bitmap objects (設備相關位圖)are represented by the MFC library CBitmap class.

 

BMP文件是Windows保存圖像的一種通用文件格式,在數(shù)字圖像處理方面占有重要的地位。BMP文件中保存的圖像數(shù)據(jù)就是一種DIB(Device-Independent Bitmap,即設備無關位圖)DIB是標準的Windows位圖格式,它自帶顏色信息,因此調色板管理非常容易。

 

BMP文件的結構

 

DIB位圖包含下列的顏色和尺寸信息:

     原始設備(即創(chuàng)建圖片的設備)的顏色格式。

     原始設備的分辯率。

     原始設備的調色板(僅用于256色)

     圖像像素數(shù)據(jù),由紅、綠、藍(RGB)三個值代表一個像素。

     一個數(shù)組壓縮標志,用于表明數(shù)據(jù)的壓縮方案(如果需要的話)。

以上這些信息保存在BITMAPINFO結構中,該結構由BITMAPINFOHEADER結構和兩個或更多個RGBQUAD結構所組成。BITMAPINFOHEADER結構所包含的成員表明了圖像的尺寸、原始設備的顏色格式、以及數(shù)據(jù)壓縮方案等信息。RGBQUAD結構標識了像素所用到的顏色數(shù)據(jù)。

 

DIB位圖也有兩種形式,分為:bottom-up DIBtop-down DIBBottom-up DIB的原點(origin)在圖像的左下角,而top-down DIB的原點在圖像的左上角。如果DIB的高度值(由BITMAPINFOHEADER結構中的biHeight成員標識)是一個正值,那么就表明這個DIB是一個bottom-up DIB,如果高度值是一個負值,那么它就是一個top-down DIB。注意:top-down DIB位圖是不能被壓縮的。

 

一般來說,BMP文件均為bottom-up DIB形式,即像素數(shù)據(jù)從下到上,從左到右存儲于文件中。也就是說,從文件中最先讀到的是圖象最下面一行的左邊第一個象素,然后是左邊第二個象素……接下來是倒數(shù)第二行左邊第一個象素,左邊第二個象素……依次類推 ,最后得到的是最上面一行的最右一個象素。

位圖文件結構概觀分析:

位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節(jié)陣列,它具有如下所示的形式。

位圖文件的組成

結構名稱

符號

位圖文件頭(bitmap-file header)

BITMAPFILEHEADER

bmfh

位圖信息頭(bitmap-information header)

BITMAPINFOHEADER

bmih

彩色表(color table)/調色板(Palette

RGBQUAD

aColors[]

圖象數(shù)據(jù)陣列

BYTE

aBitmapBits[]

 

struct BITMAPFILEHEADER {

WORD           bfType;

DWORD        bfSize;

WORD           bfReserved1;

WORD           bfReserved2;

DWORD        bfOffBits;

};

 

struct BITMAPINFOHEADER{

DWORD        biSize;

LONG            biWidth;

LONG            biHeight;

WORD           biPlanes;

WORD           biBitCount;

DWORD        biCompression;

DWORD        biSizeImage;

LONG            biXPelsPerMeter;

LONG            biYPelsPerMeter;

DWORD        biClrUsed;

DWORD        biClrImportant;

};

 

struct RGBQUAD {

BYTE             rgbBlue;

BYTE             rgbGreen;

BYTE             rgbRed;

BYTE             rgbReserved;

};

位圖文件結構詳細分析:

 

偏移量

域的名稱

大小

內容

 圖象文件頭

0000h

bfType = “BM”(0x4D42)

2 bytes

兩字節(jié)的內容用來識別位圖的類型:

‘BM’ Windows 3.1x, 95, NT, …

‘BA’ OS/2 Bitmap Array

‘CI’ OS/2 Color Icon

‘CP’ OS/2 Color Pointer

‘IC’ OS/2 Icon

‘PT’ OS/2 Pointer

 

注:因為OS/2系統(tǒng)并沒有被普及開,所以在編程時,你只需判斷第一個標識“BM”就行。

 

0002h

bfSize

1 dword

用字節(jié)表示的整個文件的大小

 

0006h

bfReserved1-2

1 dword

保留,必須設置為0

 

000Ah

bfOffBits

1 dword

從文件開始到位圖數(shù)據(jù)開始之間的數(shù)據(jù)(bitmap data)之間的偏移量,即表前三個部分的長度之和

位圖信息頭

000Eh

biSize

1 dword

位圖信息頭(Bitmap Info Header)的長度,用來描述位圖的顏色、壓縮方法等。下面的長度表示:

28h - Windows 3.1x, 95, NT, …

0Ch - OS/2 1.x

F0h - OS/2 2.x

 

注:在Windows95982000等操作系統(tǒng)中,位圖信息頭的長度并不一定是28h,因為微軟已經制定出了新的BMP文件格式,其中的信息頭結構變化比較大,長度加長。所以最好不要直接使用常數(shù)28h,而是應該從具體的文件中讀取這個值。這樣才能確保程序的兼容性。

 

0012h

biWidth

1 dword

位圖的寬度,以象素為單位

 

0016h

biHeight

1 dword

位圖的高度,以象素為單位

 

001Ah

biPlance

1 word

位圖的位面數(shù)(注:該值將總是1

 

001Ch

biBitCount

1 word

每個象素的位數(shù)

1 - 單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色)

4 - 16 色位圖

8 - 256 色位圖

16 - 16bit 高彩色位圖

24 - 24bit 真彩色位圖

32 - 32bit 增強型真彩色位圖

 

001Eh

biCompression

1 dword

壓縮說明:

0 - 不壓縮 (使用BI_RGB表示)

1 - RLE 8-使用8RLE壓縮方式(BI_RLE8表示)

2 - RLE 4-使用4RLE壓縮方式(BI_RLE4表示)

3 - Bitfields-位域存放方式(BI_BITFIELDS表示)

 

0022h

biSizeImage

1 dword

用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小。該數(shù)必須是4的倍數(shù)

 

0026h

biXPelsPerMeter

1 dword

用象素/米表示的水平分辨率

 

002Ah

biYPelsPerMeter

1 dword

用象素/米表示的垂直分辨率

 

002Eh

biClrUsed

1 dword

位圖使用的顏色數(shù)。如8-比特/象素表示為100h或者 256.

 

0032h

biClrImportant

1 dword

指定重要的顏色數(shù)。當該域的值等于顏色數(shù)時(或者等于0時),表示所有顏色都一樣重要

調色板數(shù)據(jù)

根據(jù)BMP版本的不同而不同

Palette真彩色圖是不需要調色板的,BITMAPINFOHEADER后直接是位圖數(shù)據(jù)

N * 4 byte

調色板實際上是一個數(shù)組,共有biClrUsed個元素(如果該值為零,則有2biBitCount個元素)。數(shù)組中每個元素的類型是一個RGBQUAD結構,占4個字節(jié)

rgbBlue

1字節(jié)用于藍色分量

rgbGreen

1字節(jié)用于綠色分量

rgbRed

1字節(jié)用于紅色分量

rgbReserved

1字節(jié)用于填充符(0)

圖象數(shù)據(jù)

根據(jù)BMP版本及調色板尺寸的不同而不同

Bitmap Data:該域的大小取決于壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的位圖數(shù)據(jù)字節(jié),這些數(shù)據(jù)可能是彩色調色板的索引號,也可能是實際的RGB值(真彩色位圖),這將根據(jù)圖像信息頭中的位深度值來決定。

xxx bytes

象素按照行、列的順序排列每一行的字節(jié)數(shù)必須是4的整倍數(shù)。

比較:

2色位圖,用1位就可以表示該象素的顏色(一般0表示黑,1表示白),所以一個字節(jié)可以表示8個象素。

16色位圖,用4位可以表示一個象素的顏色,所以一個字節(jié)可以表示2個象素。256色位圖,一個字節(jié)剛好可以表示1個象素。

真彩色圖,三個字節(jié)才能表示1個象素

 

 

顯示位圖的方法有許多,下面示范一種比較簡便的:

// read bitmap file “a.bmp”

HBITMAP         hBitmap = (HBITMAP)LoadImage( NULL, "a.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE );

HDC hMemDC  = CreateCompatibleDC( NULL );

BITMAP   bm;

 

// get bitmap size

// bm.bmWidth, bm.bmHeight - size of image

GetObject( hBitmap, sizeof(bm), &bm );

 

// select bitmap object

SelectObject( hMemDC, hBitmap );

 

// BitBlt the image to screen

// hdc – screen dc

BitBlt( hdc, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY );

 

// release all

DeleteDC( hMemDC );

DeleteObject( hBitmap );

 

位圖讀寫DEMO代碼

 

bitmap的一般過程:

1、聲明BITMAPFILEHEADER,并清空該結構:

       BITMAPFILEHEADER bfh

       memset( &bfh, 0, sizeof( bfh ) );

2、初始化該結構:

       bfn.bfType = 'MB';               // Bitmap

              //說明該文件的大小,cbBuffer為位圖數(shù)據(jù)的大小

       bfn.bfSize = sizeof(bfn) + cbBuffer + sizeof(BITMAPINFOHEADER);

       //說明位圖文件數(shù)據(jù)在整個位圖文件中的偏移,即數(shù)據(jù)是從哪兒開始的

       bfn.bfOffBits = sizeof(BITMAPINFORHEADER) + sizeof(BITMAPFILEHEADER);

 

如果你的應用程序想以位映射的方式保存圖像的話,你可以采用Windows操作系統(tǒng)的位圖格式來保存。步驟是,先初始化BITMAPINFO結構(由BITMAPINFOHEADER結構和RGBQUAD結構數(shù)組組成),然后填寫適當?shù)臄?shù)據(jù)用以說明待保存圖像的各種參數(shù)。最后將BITMAPFILEHEADER結構及BITMAPINFO結構和位數(shù)組寫入文件當中。

 

下面的范例代碼演示了怎樣初始化并填寫BITMAPINFOHEADER結構

PBITMAPINFO CreateBitmapInfoStruct(HWND hwnd, HBITMAP hBmp) 
{
    BITMAP bmp; 
    PBITMAPINFO pbmi;
    WORD    cClrBits;  
 
    /* Retrieve the bitmap's color format, width, and height. */  
    if (!GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp)) 
        errhandler("GetObject", hwnd);   
 
    /* Convert the color format to a count of bits. */  
    cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);
 
    if (cClrBits == 1) 
        cClrBits = 1;
    else if (cClrBits <= 4)
        cClrBits = 4; 
    else if (cClrBits <= 8) 
        cClrBits = 8;
    else if (cClrBits <= 16) 
        cClrBits = 16;
    else if (cClrBits <= 24) 
        cClrBits = 24; 
    else 
        cClrBits = 32;      
 
    /* 
     * Allocate memory for the BITMAPINFO structure. (This structure 
     * contains a BITMAPINFOHEADER structure and an array of RGBQUAD data 
     * structures.)      
     */      
    if (cClrBits != 24) 
        pbmi = (PBITMAPINFO) LocalAlloc(LPTR, 
                    sizeof(BITMAPINFOHEADER) + 
                    sizeof(RGBQUAD) * (2^cClrBits));      
    /*  There is no RGBQUAD array for the 24-bit-per-pixel format. */  
    else 
        pbmi = (PBITMAPINFO) LocalAlloc(LPTR, 
                    sizeof(BITMAPINFOHEADER));    
 
    /* Initialize the fields in the BITMAPINFO structure. */  
    pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 
    pbmi->bmiHeader.biWidth = bmp.bmWidth; 
    pbmi->bmiHeader.biHeight = bmp.bmHeight; 
    pbmi->bmiHeader.biPlanes = bmp.bmPlanes; 
    pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;
    if (cClrBits < 24) 
        pbmi->bmiHeader.biClrUsed = 2^cClrBits;   
 
    /* If the bitmap is not compressed, set the BI_RGB flag. */  
    pbmi->bmiHeader.biCompression = BI_RGB;      
 
    /* 
     * Compute the number of bytes in the array of color 
     * indices and store the result in biSizeImage.
     */  
    pbmi->bmiHeader.biSizeImage = (pbmi->bmiHeader.biWidth + 7) /8 
                                  * pbmi->bmiHeader.biHeight 
                                  * cClrBits;      
    /* 
     * Set biClrImportant to 0, indicating that all of the 
     * device colors are important.
     */  
    pbmi->bmiHeader.biClrImportant = 0;
    return pbmi;  
} 

 

3、將bfn寫入文件

4、申明BITMAPINFOHEADER,并清空該結構:

       BITMAPINFOHEADER bih;

       memset( &bih, 0, sizeof( bih ) );

5、初始化該結構:

       bih.biSize = sizeof( bih );

       bih.biWidth = biWidth;                        //位圖的寬度

       bih.biHeight = biHeight;                //位圖的高度

       bih.biPlanes = biPlanes;                //位圖的位面數(shù)

       bih.biBitCount = biBitCount;                //位圖的色深

6、將bih寫入文件

7、最后寫入數(shù)據(jù)就行了。

 

下面的范例將演示怎樣打開一個文件,并拷貝數(shù)組、獲取調色板索引、初始化保留結構、關閉文件等操作:

void CreateBMPFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi, 
                  HBITMAP hBMP, HDC hDC) 
{
    HANDLE hf;                  /* file handle */ 
    BITMAPFILEHEADER hdr;       /* bitmap file-header */ 
    PBITMAPINFOHEADER pbih;     /* bitmap info-header */ 
    LPBYTE lpBits;              /* memory pointer */ 
    DWORD dwTotal;              /* total count of bytes */ 
    DWORD cb;                   /* incremental count of bytes */ 
    BYTE *hp;                   /* byte pointer */ 
    DWORD dwTmp; 
 
 
    pbih = (PBITMAPINFOHEADER) pbi; 
    lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);    if (!lpBits) 
         errhandler("GlobalAlloc", hwnd); 
 
    /* 
     * Retrieve the color table (RGBQUAD array) and the bits 
     * (array of palette indices) from the DIB. 
     */ 
 
    if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, 
                   lpBits, pbi, DIB_RGB_COLORS)) 
        errhandler("GetDIBits", hwnd); 
 
    /* Create the .BMP file. */ 
 
    hf = CreateFile(pszFile, 
                   GENERIC_READ | GENERIC_WRITE, 
                   (DWORD) 0, 
                   (LPSECURITY_ATTRIBUTES) NULL, 
                   CREATE_ALWAYS, 
                   FILE_ATTRIBUTE_NORMAL, 
                   (HANDLE) NULL); 
 
    if (hf == INVALID_HANDLE_VALUE) 
        errhandler("CreateFile", hwnd); 
 
    hdr.bfType = 0x4d42;        /* 0x42 = "B" 0x4d = "M" */ 
 
    /* Compute the size of the entire file. */ 
 
    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + 
                 pbih->biSize + pbih->biClrUsed 
                 * sizeof(RGBQUAD) + pbih->biSizeImage); 
 
    hdr.bfReserved1 = 0; 
    hdr.bfReserved2 = 0; 
 
    /* Compute the offset to the array of color indices. */ 
 
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + 
                    pbih->biSize + pbih->biClrUsed 
                    * sizeof (RGBQUAD); 
 
    /* Copy the BITMAPFILEHEADER into the .BMP file. */ 
 
    if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER), 
       (LPDWORD) &dwTmp, (LPOVERLAPPED) NULL)) 
       errhandler("WriteFile", hwnd); 
 
    /* Copy the BITMAPINFOHEADER and RGBQUAD array into the file. */ 
 
    if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER) 
                  + pbih->biClrUsed * sizeof (RGBQUAD), 
                  (LPDWORD) &dwTmp, (LPOVERLAPPED) NULL)) 
       errhandler("WriteFile", hwnd); 
 
    /* Copy the array of color indices into the .BMP file. */ 
 
    dwTotal = cb = pbih->biSizeImage; 
    hp = lpBits; 
    while (cb > MAXWRITE)  { 
            if (!WriteFile(hf, (LPSTR) hp, (int) MAXWRITE, 
                          (LPDWORD) &dwTmp, (LPOVERLAPPED) NULL)) 
                errhandler("WriteFile", hwnd); 
            cb-= MAXWRITE; 
            hp += MAXWRITE; 
    } 
    if (!WriteFile(hf, (LPSTR) hp, (int) cb, 
         (LPDWORD) &dwTmp, (LPOVERLAPPED) NULL)) 
           errhandler("WriteFile", hwnd); 
 
    /* Close the .BMP file. */ 
 
    if (!CloseHandle(hf)) 
           errhandler("CloseHandle", hwnd); 
 
    /* Free memory. */    GlobalFree((HGLOBAL)lpBits);
} 

 

 

讀位圖:(偽代碼,未翻譯)

If open Bitmap file

Read two bytes (type) and if different than 0x4D42 stop

Ignore eight bytes

Read four bytes (start of image data)

Ignore four bytes

Read four bytes (width of bitmap)

Read four bytes (height of bitmap)

Ignore two bytes

Read two bytes (bit count of bitmap) and if different than 24 stop

Read four bytes (compression of bitmap) and if different than BI_RGB stop

Move to start of image data

Allocate memory for image data (3(one byte for red, other for

green other for blue) * ImageWidth * ImageHeight)

Read (3 * ImageWidth * ImageHeight) bytes from file to buffer

Swap the red and blue components of buffer

If ImageHeight is negative

Flip the buffer lines

End if

Close file

 

 

參考資料:

posted on 2006-02-20 13:15 夢在天涯 閱讀(1333) 評論(0)  編輯 收藏 引用 所屬分類: MFC/QT

公告

EMail:itech001#126.com

導航

統(tǒng)計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1812022
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久九九全国免费精品观看| 国产精品扒开腿做爽爽爽视频| 欧美激情第一页xxx| 久久精品国产91精品亚洲| 欧美在线三级| 久久色中文字幕| 欧美国产亚洲另类动漫| 亚洲精品偷拍| 亚洲欧美日韩国产成人| 欧美综合第一页| 男人天堂欧美日韩| 国产精品成人播放| 韩国v欧美v日本v亚洲v| 日韩视频在线免费| 欧美一级片在线播放| 欧美成人午夜激情| 日韩午夜av| 久久成人免费电影| 欧美裸体一区二区三区| 国产精品国产三级国产aⅴ9色| 亚洲日本无吗高清不卡| 久久精品国产精品亚洲综合| 美女精品在线| 99在线热播精品免费| 欧美专区在线观看一区| 欧美日韩精品一区二区三区| 国产自产女人91一区在线观看| 亚洲免费av电影| 久久久久成人精品免费播放动漫| 亚洲激情在线| 欧美专区日韩视频| 欧美日韩一区二区精品| 影音先锋一区| 欧美综合激情网| 亚洲美女在线看| 美女久久一区| 黄色国产精品| 亚洲欧美电影在线观看| 亚洲清纯自拍| 麻豆av一区二区三区久久| 国产精品一区免费观看| 一区二区三区精品| 最近中文字幕mv在线一区二区三区四区 | 一本久久综合亚洲鲁鲁| 久久高清福利视频| 国产精品久久久久久久午夜片| 亚洲美女电影在线| 欧美高清在线视频| 老牛嫩草一区二区三区日本| 国外成人在线视频网站| 欧美一区二区三区另类| 一本色道久久综合亚洲精品婷婷 | 亚洲欧洲精品一区二区三区波多野1战4| 欧美在线一二三| 亚洲欧美国产视频| 国产精品丝袜久久久久久app| 在线综合亚洲| 亚洲美女精品一区| 欧美精品v国产精品v日韩精品| 在线精品高清中文字幕| 久久综合伊人77777麻豆| 欧美中文字幕不卡| 经典三级久久| 欧美成人一区在线| 欧美风情在线观看| 夜夜夜久久久| 亚洲视频一区二区在线观看| 国产精品久久久久久久浪潮网站| 亚洲影视九九影院在线观看| 久久久久免费视频| 久久久久国产精品厨房| 亚洲国产精品ⅴa在线观看 | 久热精品视频在线观看| 亚洲欧美日韩人成在线播放| 国产精品裸体一区二区三区| 午夜激情亚洲| 欧美伊人精品成人久久综合97| 黑人一区二区| 亚洲二区在线观看| 欧美日韩123| 欧美在线视频a| 久久婷婷色综合| 一区二区三区|亚洲午夜| 亚洲一区二区综合| 在线日韩欧美视频| 日韩一二三在线视频播| 国产一区二区三区久久| 亚洲国产精品电影| 国产精品久久久久久模特| 久久久久久网| 欧美日本免费| 久久久久久网址| 欧美人与禽猛交乱配视频| 欧美一区亚洲一区| 欧美aaaaaaaa牛牛影院| 性做久久久久久久久| 玖玖玖免费嫩草在线影院一区| 亚洲网站在线| 免费亚洲电影| 欧美在线日韩| 欧美日韩国产在线观看| 久久中文精品| 国产精品午夜久久| 亚洲福利在线视频| 国产欧美不卡| 亚洲美女免费精品视频在线观看| 国产在线播放一区二区三区| 99在线观看免费视频精品观看| 黄色成人av| 亚洲欧美日韩国产综合精品二区| 亚洲美女av黄| 免费成人网www| 久久久综合香蕉尹人综合网| 国产精品多人| 亚洲精品视频免费观看| 亚洲第一在线综合在线| 欧美一二三视频| 亚洲欧美一区二区三区久久| 欧美激情第五页| 欧美激情一区二区三区全黄| 国产中文一区| 欧美在线亚洲综合一区| 欧美亚洲一区二区三区| 国产精品久久久久久久久动漫| 亚洲精品三级| 99re热这里只有精品视频| 免费不卡中文字幕视频| 男女精品网站| 亚洲二区在线视频| 久久中文字幕一区二区三区| 久久综合精品一区| 国产一区二区三区自拍| 欧美一区二区在线播放| 久久精品夜色噜噜亚洲a∨| 国产伦精品一区二区三区在线观看| 一区二区三区免费网站| 亚洲一区二区在线看| 久久综合色一综合色88| 日韩午夜av在线| 亚洲人成精品久久久久| 久久久亚洲欧洲日产国码αv| 久久精品国产亚洲一区二区三区| 国产精品最新自拍| 欧美一区二区精美| 久久高清免费观看| 国产自产高清不卡| 另类酷文…触手系列精品集v1小说| 久久婷婷激情| 亚洲精品国产精品国产自| 欧美日本亚洲| 亚洲欧美一级二级三级| 久久精品亚洲热| 亚洲国产精品www| 欧美精品在线一区二区三区| 一区二区三区国产精品| 欧美一区中文字幕| 在线免费观看日韩欧美| 欧美精品色网| 亚洲午夜三级在线| 久久久综合网站| 99人久久精品视频最新地址| 国产精品久久久久国产a级| 欧美在线高清| 亚洲区一区二| 久久国产欧美精品| 亚洲精品免费在线| 国产精品网站在线| 免费一级欧美片在线观看| 一个人看的www久久| 久久免费午夜影院| 亚洲精品亚洲人成人网| 国产欧美激情| 欧美精品乱人伦久久久久久 | 亚洲国产小视频| 欧美日韩一区二区三区四区五区| 西西人体一区二区| 亚洲激情专区| 久久久久青草大香线综合精品| 日韩一级精品视频在线观看| 国产日韩一级二级三级| 欧美大片一区| 久久成年人视频| 亚洲视频一二区| 亚洲电影在线免费观看| 久久久久成人精品| 亚洲欧美成人一区二区在线电影| 亚洲国产三级网| 狠狠爱www人成狠狠爱综合网| 欧美日韩精品福利| 久色成人在线| 欧美一区观看| 亚洲一级影院| 亚洲人体影院| 欧美国产成人在线| 久久久亚洲影院你懂的| 亚洲一区二区三区中文字幕| 亚洲人成网站在线观看播放| 激情综合亚洲| 国产综合一区二区| 国产亚洲精品久久久久久|