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

C++ Programmer's Cookbook

{C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

GDI Bitmaps and Device-Independent Bitmaps 操作

DIB(Device-Independent Bitmap,設(shè)備無(wú)關(guān)位圖)小知識(shí)

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

 

位圖簡(jiǎn)介

 

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

 

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

 

BMP文件的結(jié)構(gòu)

 

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

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

     原始設(shè)備的分辯率。

     原始設(shè)備的調(diào)色板(僅用于256色)

     圖像像素?cái)?shù)據(jù),由紅、綠、藍(lán)(RGB)三個(gè)值代表一個(gè)像素。

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

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

 

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

 

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

位圖文件結(jié)構(gòu)概觀分析:

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

位圖文件的組成

結(jié)構(gòu)名稱

符號(hào)

位圖文件頭(bitmap-file header)

BITMAPFILEHEADER

bmfh

位圖信息頭(bitmap-information header)

BITMAPINFOHEADER

bmih

彩色表(color table)/調(diào)色板(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;

};

位圖文件結(jié)構(gòu)詳細(xì)分析:

 

偏移量

域的名稱

大小

內(nèi)容

 圖象文件頭

0000h

bfType = “BM”(0x4D42)

2 bytes

兩字節(jié)的內(nèi)容用來(lái)識(shí)別位圖的類型:

‘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

 

注:因?yàn)?/SPAN>OS/2系統(tǒng)并沒(méi)有被普及開(kāi),所以在編程時(shí),你只需判斷第一個(gè)標(biāo)識(shí)“BM”就行。

 

0002h

bfSize

1 dword

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

 

0006h

bfReserved1-2

1 dword

保留,必須設(shè)置為0

 

000Ah

bfOffBits

1 dword

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

位圖信息頭

000Eh

biSize

1 dword

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

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

0Ch - OS/2 1.x

F0h - OS/2 2.x

 

注:在Windows95982000等操作系統(tǒng)中,位圖信息頭的長(zhǎng)度并不一定是28h,因?yàn)槲④浺呀?jīng)制定出了新的BMP文件格式,其中的信息頭結(jié)構(gòu)變化比較大,長(zhǎng)度加長(zhǎng)。所以最好不要直接使用常數(shù)28h,而是應(yīng)該從具體的文件中讀取這個(gè)值。這樣才能確保程序的兼容性。

 

0012h

biWidth

1 dword

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

 

0016h

biHeight

1 dword

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

 

001Ah

biPlance

1 word

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

 

001Ch

biBitCount

1 word

每個(gè)象素的位數(shù)

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

4 - 16 色位圖

8 - 256 色位圖

16 - 16bit 高彩色位圖

24 - 24bit 真彩色位圖

32 - 32bit 增強(qiáng)型真彩色位圖

 

001Eh

biCompression

1 dword

壓縮說(shuō)明:

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ù)。當(dāng)該域的值等于顏色數(shù)時(shí)(或者等于0時(shí)),表示所有顏色都一樣重要

調(diào)色板數(shù)據(jù)

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

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

N * 4 byte

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

rgbBlue

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

rgbGreen

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

rgbRed

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

rgbReserved

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

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

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

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

xxx bytes

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

比較:

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

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

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

 

 

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

// 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 );

 

位圖讀寫(xiě)DEMO代碼

 

寫(xiě)bitmap的一般過(guò)程:

1、聲明BITMAPFILEHEADER,并清空該結(jié)構(gòu):

       BITMAPFILEHEADER bfh

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

2、初始化該結(jié)構(gòu):

       bfn.bfType = 'MB';               // Bitmap

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

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

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

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

 

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

 

下面的范例代碼演示了怎樣初始化并填寫(xiě)BITMAPINFOHEADER結(jié)構(gòu)

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寫(xiě)入文件

4、申明BITMAPINFOHEADER,并清空該結(jié)構(gòu):

       BITMAPINFOHEADER bih;

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

5、初始化該結(jié)構(gòu):

       bih.biSize = sizeof( bih );

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

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

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

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

6、將bih寫(xiě)入文件

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

 

下面的范例將演示怎樣打開(kāi)一個(gè)文件,并拷貝數(shù)組、獲取調(diào)色板索引、初始化保留結(jié)構(gòu)、關(guān)閉文件等操作:

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 夢(mèng)在天涯 閱讀(1346) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC/QT

公告

EMail:itech001#126.com

導(dǎo)航

統(tǒng)計(jì)

  • 隨筆 - 461
  • 文章 - 4
  • 評(píng)論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1818534
  • 排名 - 5

最新評(píng)論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              久久视频在线看| 久久久久久69| 久久精品卡一| 亚洲午夜久久久久久尤物| 久久综合狠狠综合久久综合88| 国产九九视频一区二区三区| 亚洲免费成人av电影| 久久狠狠婷婷| 日韩视频一区二区| 欧美成人嫩草网站| **欧美日韩vr在线| 久久成人亚洲| 亚洲欧美国产高清va在线播| 欧美日韩中文在线| 99精品欧美一区| 亚洲黄一区二区三区| 先锋影音国产精品| 99re热这里只有精品视频| 国产乱人伦精品一区二区| 久久一区免费| 久久精品欧美| 狠狠综合久久av一区二区小说| 欧美一二三区在线观看| 久久青草久久| 亚洲专区欧美专区| 久久婷婷国产综合国色天香| 欧美电影免费| 欧美在线视频一区| 免费在线播放第一区高清av| 一区精品久久| 欧美 日韩 国产 一区| 久久久综合精品| 亚洲国产精品综合| 亚洲国产成人在线| 你懂的亚洲视频| 亚洲国产高清在线| 亚洲高清色综合| 国产伦精品一区二区三区高清版| 欧美激情网友自拍| 欧美精品在线视频观看| 亚洲精选91| 欧美一级日韩一级| 曰本成人黄色| 亚洲国产91| 欧美三级韩国三级日本三斤| 美女精品在线| 欧美连裤袜在线视频| 久久免费精品视频| 久久伊伊香蕉| 欧美在线关看| 久久精品国产一区二区三区免费看| 在线视频你懂得一区| 亚洲一区999| 国产美女高潮久久白浆| 亚洲激情六月丁香| 激情丁香综合| 亚洲欧美日韩在线综合| 精品动漫一区| 亚洲免费在线观看视频| 一本不卡影院| 西西人体一区二区| 1024国产精品| 性欧美精品高清| 亚洲欧美日韩国产一区二区三区| 久久狠狠久久综合桃花| 亚洲美洲欧洲综合国产一区| 久久久久久久一区| 久久精品国产久精国产一老狼| 欧美日韩精品二区第二页| 久久精品免视看| 国产精品久久久久久久久搜平片| 久久久噜噜噜久久中文字免| 国产精品老女人精品视频| 亚洲精品视频在线| 美女黄毛**国产精品啪啪 | 国产精品私拍pans大尺度在线| 欧美一区二区三区免费大片| 久久高清免费观看| 欧美一区国产一区| 国产精品日韩一区二区三区| 99视频精品全部免费在线| 国产婷婷色一区二区三区在线| 欧美高清在线| 国产精品羞羞答答| 中文精品视频一区二区在线观看| 影音先锋在线一区| 久久精品国产99精品国产亚洲性色 | 在线亚洲一区观看| 欧美激情一区二区三区高清视频| 篠田优中文在线播放第一区| 欧美视频中文在线看 | 校园春色综合网| 欧美体内she精视频| 日韩视频永久免费| 中文精品视频| 久久亚洲精品一区| 老司机午夜精品视频| 欧美视频久久| av不卡在线| 亚洲一区免费网站| 国产精品国产三级国产专播品爱网 | 在线欧美视频| 浪潮色综合久久天堂| 欧美ed2k| 亚洲日本在线观看| 久久大逼视频| 麻豆精品网站| 91久久久久久| 久久久久久久久蜜桃| 美女999久久久精品视频| 在线欧美三区| 欧美大香线蕉线伊人久久国产精品| 亚洲韩国日本中文字幕| 韩国成人精品a∨在线观看| 久久狠狠久久综合桃花| 免费在线亚洲欧美| 亚洲精品国产精品国产自| 欧美激情一区三区| 一本色道久久综合狠狠躁篇怎么玩| 亚洲精品乱码久久久久久蜜桃麻豆 | 在线视频你懂得一区二区三区| 欧美日韩综合| 亚洲女同同性videoxma| 久久久www成人免费精品| 亚洲成人在线视频播放| 欧美韩日高清| 欧美激情区在线播放| 日韩视频三区| 国产精品毛片高清在线完整版 | 在线日本高清免费不卡| 欧美va亚洲va国产综合| 亚洲另类自拍| 欧美一区二区三区另类| 欧美日韩国产精品一卡| 亚洲一区二区影院| 久久中文字幕一区| 亚洲精品偷拍| 国产精品另类一区| 久久福利影视| 亚洲人被黑人高潮完整版| 亚洲欧洲一区二区三区| 欧美日韩一区二区在线播放| 最新中文字幕亚洲| 午夜激情综合网| 国产精品乱子久久久久| 欧美主播一区二区三区美女 久久精品人 | 欧美精品一区二区三| 亚洲午夜小视频| 久久久综合视频| 91久久亚洲| 国产精品任我爽爆在线播放| 久久av在线看| 亚洲久久在线| 久久青青草综合| 夜夜爽av福利精品导航| 国产一区91精品张津瑜| 亚洲一区日本| 欧美黄色片免费观看| 亚洲欧美成人一区二区在线电影| 海角社区69精品视频| 欧美日本一区二区视频在线观看| 亚洲在线免费视频| 欧美风情在线观看| 午夜久久黄色| 亚洲精品美女在线观看播放| 国产九九精品| 欧美另类69精品久久久久9999| 欧美一级片一区| 日韩视频二区| 免费欧美电影| 欧美一区二区三区播放老司机 | 在线播放中文字幕一区| 国产精品video| 亚洲综合色视频| 亚洲国产合集| 久久久久久**毛片大全| 亚洲视频自拍偷拍| 亚洲国产成人高清精品| 国产美女精品视频免费观看| 欧美国产一区二区在线观看| 欧美一区二区| 这里只有精品丝袜| 亚洲福利视频一区二区| 久久久999国产| 亚洲综合精品四区| 亚洲日本成人女熟在线观看| 国产性猛交xxxx免费看久久| 欧美日韩激情网| 免费成人美女女| 久久av一区二区| 亚洲永久免费av| 99精品福利视频| 亚洲国产精品123| 久久综合给合| 欧美在线视频观看免费网站| 一区二区三区你懂的| 亚洲经典在线| 在线不卡亚洲| 国产一区二区日韩精品欧美精品| 国产精品成人一区二区三区夜夜夜 |