亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? image.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : image.cpp	   					                                     //
//  Description: Generic Image Processing Classes                                    //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <math.h>
#include <tchar.h>

#include "DIB.h"
#include "Image.h"

//////////////////////////////////////////////////
//												//
//           C O N V O L U T I O N				//
//												//
//////////////////////////////////////////////////

bool KImage::Convolution(KFilter * pFilter)
{
	BYTE * pDestBits = new BYTE[m_nImageSize];

	if ( pDestBits==NULL )
		return false;

	for (int y=0; y<m_nHeight; y++)
	{
		unsigned char * pBuffer = (unsigned char *) m_pBits   + m_nBPS * y;
		unsigned char * pDest   = (unsigned char *) pDestBits + m_nBPS * y;

		if (  (y>=pFilter->GetHalf()) && (y<(m_nHeight- pFilter->GetHalf())) )
			switch ( m_nImageFormat )
			{
				case DIB_8BPP:
					pFilter->Filter8bpp(pDest, pBuffer, m_nWidth, m_nBPS);
					break;

				case DIB_24RGB888:	// 24-bpp RGB
					pFilter->Filter24bpp(pDest, pBuffer, m_nWidth, m_nBPS);
					break;

				case DIB_32RGBA8888: // 32-bpp RGBA
				case DIB_32RGB888:   // 32-bpp RGB
					pFilter->Filter32bpp(pDest, pBuffer, m_nWidth, m_nBPS);
					break;

				default:
					delete [] pDestBits;
					return false;
			}
		else
			memcpy(pDest, pBuffer, m_nBPS); // copy unprocessed scanlines
	}
	
	memcpy(m_pBits, pDestBits, m_nImageSize); // overwrite source pixel array
	delete [] pDestBits;

	return true;
}

//////////////////////////////////////////////////
//												//
//   P I X E L   T R A N S F O R M A T I O N    //
//												//
//////////////////////////////////////////////////

BITMAPINFO * KImage::SplitChannel(Operator oper)
{
	KChannel channel;

	return channel.Split(* this, oper);
}


bool KImage::PixelTransform(KPixelMapper & map)
{
	if ( m_pRGBTRIPLE )
		map.SetColorTable((BYTE *) m_pRGBTRIPLE, sizeof(RGBTRIPLE), m_nClrUsed);
	else if ( m_pRGBQUAD )
		map.SetColorTable((BYTE *) m_pRGBQUAD, sizeof(RGBQUAD), m_nClrUsed);

	for (int y=0; y<m_nHeight; y++)
	{
		unsigned char * pBuffer = (unsigned char *) m_pBits + m_nBPS * y;
	
		if ( ! map.StartLine(y) )
			break;

		switch ( m_nImageFormat )
		{
			case DIB_1BPP:
				map.Map1bpp(pBuffer, m_nWidth);
				break;

			case DIB_2BPP:
				map.Map2bpp(pBuffer, m_nWidth);
				break;

			case DIB_4BPP:
				map.Map4bpp(pBuffer, m_nWidth);
				break;

			case DIB_8BPP:
				map.Map8bpp(pBuffer, m_nWidth);
				break;

			case DIB_16RGB555: 	// 15 bit RGB color image, 5-5-5, 1 bit unused
				map.Map555(pBuffer, m_nWidth);
				break;

			case DIB_16RGB565:	// 16 bit RGB color image, 5-6-5
				map.Map565(pBuffer, m_nWidth);
				break;

			case DIB_24RGB888:	// 24-bpp RGB
				map.Map24bpp(pBuffer, m_nWidth);
				break;

			case DIB_32RGBA8888: // 32-bpp RGBA
			case DIB_32RGB888:   // 32-bpp RGB
				map.Map32bpp(pBuffer, m_nWidth);
				break;

			default:
				return false;
		}
	}
	
	return true;
}

//////////////////////////////////////////////////
//												//
//   C O L O R   T R A N S F O R M A T I O N    //
//												//
//////////////////////////////////////////////////

template <class Dummy>
bool ColorTransform(KDIB * dib, Dummy map)
{
	// support OS/2 DIB color table: 1-bpp, 4-bpp, 8-bpp, include RLE compression
	if ( dib->m_pRGBTRIPLE )
	{
		for (int i=0; i<dib->m_nClrUsed; i++)
			map(dib->m_pRGBTRIPLE[i].rgbtRed, dib->m_pRGBTRIPLE[i].rgbtGreen, dib->m_pRGBTRIPLE[i].rgbtBlue);

		return true;
	}

	// support Windows DIB color table: 1-bpp, 2-bpp, 4-bpp, 8-bpp, include RLE compression
	if ( dib->m_pRGBQUAD )
	{
		for (int i=0; i<dib->m_nClrUsed; i++)
			map(dib->m_pRGBQUAD[i].rgbRed, dib->m_pRGBQUAD[i].rgbGreen, dib->m_pRGBQUAD[i].rgbBlue);

		return true;
	}
	
	for (int y=0; y<dib->m_nHeight; y++)
	{
		int width = dib->m_nWidth;
		unsigned char * pBuffer = (unsigned char *) dib->m_pBits + dib->m_nBPS * y;
		
		switch ( dib->m_nImageFormat )
		{
			case DIB_16RGB555: 	// 15 bit RGB color image, 5-5-5, 1 bit unused
				for (; width>0; width--)
				{
					BYTE red   = ( (* (WORD *) pBuffer) & 0x7C00 ) >> 7;
					BYTE green = ( (* (WORD *) pBuffer) & 0x03E0 ) >> 2;
					BYTE blue  = ( (* (WORD *) pBuffer) & 0x001F ) << 3;
					
					map( red, green, blue );
					
					* ( WORD *) pBuffer = ( ( red >> 3 ) << 10 ) | ( ( green >> 3 ) << 5 ) | ( blue >> 3 );
					
					pBuffer += 2;
				}
				break;

			case DIB_16RGB565:	// 16 bit RGB color image, 5-6-5
				for (; width>0; width--)
				{
					const DWORD StandardMask565[] =  { 0x00F800, 0x0007E0, 0x00001F };

					BYTE red   = ( (* (WORD *) pBuffer) & 0xF800 ) >> 8;
					BYTE green = ( (* (WORD *) pBuffer) & 0x07E0 ) >> 3;
					BYTE blue  = ( (* (WORD *) pBuffer) & 0x001F ) << 3;
					
					map( red, green, blue );
					
					* ( WORD *) pBuffer = ( ( red >> 3 ) << 11 ) | ( ( green >> 2 ) << 5 ) | ( blue >> 3 );
					
					pBuffer += 2;
				}
				break;

			case DIB_24RGB888:	// 24-bpp RGB
				for (; width>0; width--)
				{
					map( pBuffer[2], pBuffer[1], pBuffer[0] );
					pBuffer += 3;
				}
				break;

			case DIB_32RGBA8888: // 32-bpp RGBA
			case DIB_32RGB888:   // 32-bpp RGB
				for (; width>0; width--)
				{
					map( pBuffer[2], pBuffer[1], pBuffer[0] );
					pBuffer += 4;
				}
				break;

			default:
				return false;
		}
	}
	
	return true;
}


bool KImage::ToGreyScale(void)
{
	return ColorTransform(this, MaptoGray);
}


BYTE   redGammaRamp[256];
BYTE greenGammaRamp[256];
BYTE  blueGammaRamp[256];

inline void MapGamma(BYTE & red, BYTE & green, BYTE & blue)
{
	red   =   redGammaRamp[red];
	green = greenGammaRamp[green];
	blue  =  blueGammaRamp[blue];
}


BYTE gamma(double g, int index)
{
	return min(255, (int) ( (255.0 * pow(index/255.0, 1.0/g)) + 0.5 ) ); 
} 
    
bool KImage::GammaCorrect(double redgamma, double greengamma, double bluegamma)
{
	for (int i=0; i<256; i++)
	{
		  redGammaRamp[i] = gamma(  redgamma, i);
		greenGammaRamp[i] = gamma(greengamma, i);
		 blueGammaRamp[i] = gamma( bluegamma, i);
	}

	return ColorTransform(this, MapGamma);
}


bool KImage::Lighten(void)
{
	return ColorTransform(this, LightenColor);
}


//////////////////////////////////////////////////////////////


void KPixelMapper::Map1bpp(BYTE * pBuffer, int width)
{
	BYTE mask  = 0x80;
	int  shift = 7;

	for (; width>0; width--)
	{
		BYTE index = ( ( pBuffer[0] & mask ) >> shift ) & 0x1;

		if ( MapIndex(index) )
			pBuffer[0] =  ( pBuffer[0] & ~ mask ) || (( index & 0x0F) << shift);

		mask  >>= 1;
		shift -= 1;

		if ( mask==0 )
		{
			pBuffer ++; mask = 0x80; shift = 7;
		}
	}
}


void KPixelMapper::Map2bpp(BYTE * pBuffer, int width)
{
	BYTE mask  = 0xC0;
	int  shift = 6;

	for (; width>0; width--)
	{
		BYTE index = ( ( pBuffer[0] & mask ) >> shift ) & 0x3;

		if ( MapIndex(index) )
			pBuffer[0] =  ( pBuffer[0] & ~ mask ) || (( index & 0x0F) << shift);

		mask  >>= 2;
		shift -= 2;

		if ( mask==0 )
		{
			pBuffer ++; mask = 0xC0; shift = 6;
		}
	}
}


void KPixelMapper::Map4bpp(BYTE * pBuffer, int width)
{
	BYTE mask  = 0xF0;
	int  shift = 4;

	for (; width>0; width--)
	{
		BYTE index = ( ( pBuffer[0] & mask ) >> shift ) & 0x0F;

		if ( MapIndex(index) )
			pBuffer[0] =  ( pBuffer[0] & ~ mask ) || (( index & 0x0F) << shift);

		mask  = ~ mask;
		shift = 4 - shift;

		if ( mask==0xF0 )
			pBuffer ++;
	}
}


void KPixelMapper:: Map8bpp(BYTE * pBuffer, int width)
{
	for (; width>0; width--)
	{
		MapIndex(pBuffer[0]);
		pBuffer ++;
	}
}


void KPixelMapper::Map555(BYTE * pBuffer, int width)
{
	for (; width>0; width--)
	{
		BYTE red   = ( (* (WORD *) pBuffer) & 0x7C00 ) >> 7;
		BYTE green = ( (* (WORD *) pBuffer) & 0x03E0 ) >> 2;
		BYTE blue  = ( (* (WORD *) pBuffer) & 0x001F ) << 3;
					
		if ( MapRGB( red, green, blue ) )
			* ( WORD *) pBuffer = ( ( red >> 3 ) << 10 ) | ( ( green >> 3 ) << 5 ) | ( blue >> 3 );
					
		pBuffer += 2;
	}
}


void KPixelMapper::Map565(BYTE * pBuffer, int width)
{
	for (; width>0; width--)
	{
		BYTE red   = ( (* (WORD *) pBuffer) & 0xF800 ) >> 8;
		BYTE green = ( (* (WORD *) pBuffer) & 0x07E0 ) >> 3;
		BYTE blue  = ( (* (WORD *) pBuffer) & 0x001F ) << 3;
					
		if ( MapRGB( red, green, blue ) )
			* ( WORD *) pBuffer = ( ( red >> 3 ) << 11 ) | ( ( green >> 2 ) << 5 ) | ( blue >> 3 );
					
		pBuffer += 2;
	}
}


void KPixelMapper::Map24bpp(BYTE * pBuffer, int width)
{
	for (; width>0; width--)
	{
		MapRGB( pBuffer[2], pBuffer[1], pBuffer[0] );
		pBuffer += 3;
	}
}


void KPixelMapper::Map32bpp(BYTE * pBuffer, int width)
{
	for (; width>0; width--)
	{
		MapRGB( pBuffer[2], pBuffer[1], pBuffer[0] );
		pBuffer += 4;
	}
}


BITMAPINFO * KChannel::Split(KImage & dib, Operator oper)
{
	m_Operator = oper;
	m_nBPS     = (dib.GetWidth() + 3) / 4 * 4;	// scanline size for 8-bpp DIB
	
	int headsize = sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);

	BITMAPINFO * pNewDIB = (BITMAPINFO *) new BYTE[headsize + m_nBPS * abs(dib.GetHeight())];

	memset(pNewDIB, 0, headsize);

	pNewDIB->bmiHeader.biSize		 = sizeof(BITMAPINFOHEADER); 
    pNewDIB->bmiHeader.biWidth		 = dib.GetWidth(); 
    pNewDIB->bmiHeader.biHeight		 = dib.GetHeight(); 
    pNewDIB->bmiHeader.biPlanes		 = 1; 
    pNewDIB->bmiHeader.biBitCount	 = 8; 
    pNewDIB->bmiHeader.biCompression = BI_RGB; 

	for (int c=0; c<256; c++)
	{
		pNewDIB->bmiColors[c].rgbRed   = c;
		pNewDIB->bmiColors[c].rgbGreen = c;
		pNewDIB->bmiColors[c].rgbBlue  = c;
	}

	m_pBits  = (BYTE*) & pNewDIB->bmiColors[256];
	
	if ( pNewDIB==NULL )
		return NULL;

	dib.PixelTransform(* this);

	return pNewDIB;
}


void KHistogram::Sample(KImage & dib)
{
	memset(m_FreqRed,   0, sizeof(m_FreqRed));
	memset(m_FreqGreen, 0, sizeof(m_FreqGreen));
	memset(m_FreqBlue,  0, sizeof(m_FreqBlue));
	memset(m_FreqGray,  0, sizeof(m_FreqGray));
	
	dib.PixelTransform(* this);
}


void KFilter::Filter8bpp(BYTE * pDest, BYTE * pSource, int nWidth, int dy)
{
	memcpy(pDest, pSource, m_nHalf); 
	pDest   += m_nHalf; 
	pSource += m_nHalf;

	for (int i=nWidth - 2 * m_nHalf; i>0; i--)
		* pDest ++ = Kernel(pSource++, 1, dy);
		
	memcpy(pDest, pSource, m_nHalf); 
}


void KFilter::Filter24bpp(BYTE * pDest, BYTE * pSource, int nWidth, int dy)
{
	memcpy(pDest, pSource, m_nHalf * 3);
	pDest   += m_nHalf * 3;
	pSource += m_nHalf * 3;

	for (int i=nWidth - 2 * m_nHalf; i>0; i--)
	{
		* pDest ++ = Kernel(pSource++, 3, dy);
		* pDest ++ = Kernel(pSource++, 3, dy);
		* pDest ++ = Kernel(pSource++, 3, dy);
	}

	memcpy(pDest, pSource, m_nHalf * 3);
}


void KFilter::Filter32bpp(BYTE * pDest, BYTE * pSource, int nWidth, int dy)
{
	memcpy(pDest, pSource, m_nHalf * 4);
	pDest   += m_nHalf * 4;
	pSource += m_nHalf * 4;

	for (int i=nWidth - 2 * m_nHalf; i>0; i--)
	{
		* pDest ++ = Kernel(pSource++, 4, dy);
		* pDest ++ = Kernel(pSource++, 4, dy);
		* pDest ++ = Kernel(pSource++, 4, dy);
		* pDest ++ = * pSource++;				// copy alpha channel
	}

	memcpy(pDest, pSource, m_nHalf * 4);
}


void Describe33Filter(HDC hDC, int x, int y, const int * matrix, TCHAR * name, int weight, int add)
{
	SelectObject(hDC, GetStockObject(SYSTEM_FIXED_FONT));

	TextOut(hDC, x, y, name, _tcslen(name)); 

	if ( matrix )
	{
		y+=20;

		TCHAR number[32];

		for (int i=0; i<3; i++)
		{
			wsprintf(number, _T("%c |%2d %2d %2d|"), 
				(i==1) ? '*' : ' ',
				matrix[i*3], matrix[i*3+1], matrix[i*3+2]);
			TextOut(hDC, x + 5, y + i * 15, number, _tcslen(number));
		}

		if ( add )
			wsprintf(number, _T("/ %d + %d"), weight, add);
		else
			wsprintf(number, _T("/ %d"), weight);
	
		TextOut(hDC, x+5, y + 50, number, _tcslen(number));
	}
}
	

TCHAR szSmooth[]        = _T("Smooth");
TCHAR szGuasianSmooth[] = _T("Guasian Smooth");
TCHAR szSharpening[]    = _T("Sharpening");
TCHAR szLaplasian[]     = _T("Laplasian");
TCHAR szEmboss135[]     = _T("Emboss 135");
TCHAR szEmboss90[]      = _T("Emboss 90?50%");

K33Filter< 1,  1,  1,  1,  1,  1,  1,  1,  1, 9,   0, false, szSmooth        > filter33_smooth;
K33Filter< 0,  1,  0,  1,  4,  1,  0,  1,  0, 8,   0, false, szGuasianSmooth > filter33_guasiansmooth;
K33Filter< 0, -1,  0, -1,  9, -1,  0, -1,  0, 5,   0, true,  szSharpening    > filter33_sharpening;
K33Filter<-1, -1, -1, -1,  8, -1, -1, -1, -1, 1, 128, true,  szLaplasian     > filter33_laplasian;
K33Filter< 1,  0,  0,  0,  0,  0,  0,  0, -1, 1, 128, true,  szEmboss135     > filter33_emboss135;
K33Filter< 0,  1,  0,  0,  0,  0,  0, -1,  0, 2, 128, true,  szEmboss90      > filter33_emboss90;

KDilation filter_dilation;
KErosion  filter_erosion;
KOutline  filter_outline;

KFilter * StockFilters[] = {
	NULL,
	& filter33_smooth,
	& filter33_guasiansmooth,
	& filter33_sharpening,
	& filter33_laplasian,
	& filter33_emboss135,
	& filter33_emboss90,
	& filter_dilation,
	& filter_erosion,
	& filter_outline
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产大陆a不卡| 亚洲国产综合色| 国产最新精品免费| 久久午夜国产精品| 丁香婷婷综合激情五月色| 中文字幕av在线一区二区三区| 国产成人免费网站| 亚洲日本在线看| 欧美日韩精品一区二区在线播放| 日韩高清在线电影| 欧美精品一区二区久久婷婷| 国产成人av电影在线观看| 国产精品无人区| 色视频成人在线观看免| 视频一区二区三区在线| 欧美成人猛片aaaaaaa| 国产传媒欧美日韩成人| 亚洲人精品午夜| 欧美日韩国产精品自在自线| 精品制服美女丁香| 国产精品成人免费| 4438x亚洲最大成人网| 国产一区二区福利| 亚洲男女一区二区三区| 欧美一区2区视频在线观看| 国产黄人亚洲片| 亚洲h精品动漫在线观看| 2014亚洲片线观看视频免费| 日本高清不卡在线观看| 毛片基地黄久久久久久天堂| 国产精品卡一卡二| 在线成人av网站| 不卡影院免费观看| 秋霞午夜av一区二区三区| 国产精品无码永久免费888| 91精品一区二区三区久久久久久| 粉嫩一区二区三区在线看| 婷婷久久综合九色综合绿巨人| 国产亚洲欧洲一区高清在线观看| 欧美影视一区二区三区| 豆国产96在线|亚洲| 美女免费视频一区| 亚洲第一精品在线| 国产精品伦一区二区三级视频| 3d动漫精品啪啪1区2区免费| 99久久99久久久精品齐齐| 国内精品不卡在线| 亚洲成在人线免费| 亚洲三级理论片| 欧美经典三级视频一区二区三区| 欧美一区中文字幕| 在线视频一区二区免费| 成人免费毛片高清视频| 裸体在线国模精品偷拍| 亚洲成人黄色小说| 亚洲激情av在线| 国产精品国产三级国产普通话99| 欧美成人bangbros| 欧美一区二区三区免费大片| 在线看国产一区二区| 99免费精品视频| 成人黄色综合网站| 成人网在线免费视频| 国产精品自拍毛片| 国产在线播精品第三| 美国毛片一区二区三区| 青青国产91久久久久久| 日韩精品91亚洲二区在线观看| 一区二区三区中文字幕精品精品| 亚洲欧美国产毛片在线| 中文字幕一区二区三区四区不卡| 欧美精品一区二区久久婷婷| 精品国产免费人成电影在线观看四季| 3751色影院一区二区三区| 欧美精品日日鲁夜夜添| 欧美日韩国产综合久久| 欧美日韩二区三区| 91精品国产aⅴ一区二区| 日韩丝袜美女视频| 欧美mv日韩mv亚洲| 亚洲精品一区二区三区香蕉| 精品国产免费久久| 国产日韩欧美a| 国产精品久久午夜| 亚洲欧美国产高清| 性欧美大战久久久久久久久| 首页国产丝袜综合| 久久精品久久久精品美女| 国产在线不卡一区| 99久久精品国产网站| 日本久久一区二区| 91精品国产色综合久久ai换脸| 欧美一区二区三区电影| 精品sm在线观看| 国产精品久线观看视频| 亚洲一区视频在线观看视频| 亚洲.国产.中文慕字在线| 激情亚洲综合在线| 国产成人av电影在线播放| 色婷婷综合久久| 3d成人h动漫网站入口| 久久久精品免费免费| 亚洲欧洲国产日本综合| 亚洲综合色噜噜狠狠| 蜜桃av一区二区在线观看| 成人午夜私人影院| 欧美午夜精品久久久久久孕妇| 日韩丝袜美女视频| 自拍视频在线观看一区二区| 亚洲综合一区二区| 国内外成人在线| 色综合久久久久综合体桃花网| 欧美色图12p| 国产欧美一区二区精品仙草咪| 亚洲尤物在线视频观看| 久久精品国产亚洲高清剧情介绍| 不卡一区在线观看| 日韩丝袜美女视频| 亚洲卡通动漫在线| 国产中文一区二区三区| 欧美亚洲另类激情小说| 久久久久久久久久久久久久久99| 天天操天天干天天综合网| 成人免费高清在线| 欧美一区二区三区四区久久| 中文字幕一区二区视频| 久久se这里有精品| 欧美少妇性性性| 欧美高清在线精品一区| 日av在线不卡| 欧美三级资源在线| 亚洲欧洲在线观看av| 精品一区二区三区免费视频| 欧美综合亚洲图片综合区| 国产日韩欧美高清在线| 另类小说视频一区二区| 在线欧美小视频| 国产精品嫩草影院com| 蜜桃视频一区二区三区在线观看| 日本久久精品电影| 亚洲欧美另类小说| 成人激情午夜影院| 久久久亚洲欧洲日产国码αv| 婷婷国产在线综合| 欧美亚洲免费在线一区| 亚洲三级在线观看| 97久久超碰国产精品| 日本一区二区动态图| 久久国产精品无码网站| 制服.丝袜.亚洲.另类.中文 | 色婷婷久久综合| 国产日韩高清在线| 国产精品综合网| 2024国产精品视频| 精品一二三四区| 日韩一区二区在线看| 中文字幕一区二区日韩精品绯色| 国产一区二区三区av电影| 国产九色sp调教91| 美日韩一区二区| 日本怡春院一区二区| 一本色道久久加勒比精品| 亚洲日本va午夜在线电影| 久久久久国产免费免费| 国产欧美一区在线| 亚洲精品乱码久久久久久| 一区二区三区四区在线| 亚洲综合视频在线观看| 日韩有码一区二区三区| 久久成人免费电影| 白白色亚洲国产精品| 91在线播放网址| 日韩精品一区国产麻豆| 欧美精品一区二区三区在线| 不卡av免费在线观看| 欧美自拍偷拍午夜视频| 在线电影欧美成精品| 久久精品水蜜桃av综合天堂| 中文字幕视频一区| 视频一区中文字幕国产| 国产一区二区三区视频在线播放| 成人黄页毛片网站| 欧美三级韩国三级日本三斤| 日韩欧美黄色影院| 亚洲人成网站色在线观看| 视频一区二区中文字幕| 成人在线综合网站| 欧美高清性hdvideosex| 久久蜜桃av一区二区天堂| 亚洲欧美日韩一区| 麻豆成人免费电影| k8久久久一区二区三区| 91精品国产综合久久精品图片| 欧美激情综合五月色丁香| 日韩成人精品视频| 91玉足脚交白嫩脚丫在线播放| 欧美一区二区精品在线| 亚洲人成网站色在线观看| 国产在线国偷精品产拍免费yy| 欧美午夜一区二区三区|