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

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

?? gifapi.cpp

?? 《VC++數字圖像處理》人民郵電大學出版社 何斌 馬天予 王遠堅 朱紅蓮
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
 *
 * 參數:
 *   CFile& file			- 源GIF文件
 *   LPWORD lpwMemLen		- 緩沖區長度(指針)
 *   LPDWORD lpdwDataLen	- 剩余數據長度(指針)
 *   LPSTR lpSrcBuff		- 緩沖區指針
 *	 LPBOOL lpbEOF			- 結束標志
 *
 * 返回值:
 *   無
 *
 * 說明:
 *   該函數用來讀取指定GIF文件中的圖像編碼,每次最多讀取MAX_BUFF_SIZE
 * 字節,是否讀完由標志lpbEOF指定。
 *
 *************************************************************************/
void WINAPI ReadSrcData(CFile& file, LPWORD lpwMemLen, LPDWORD lpdwDataLen,
                        LPSTR lpSrcBuff, LPBOOL lpbEOF)
{
	// 判斷數據長度是否仍然大于內存大小
	if ((*lpdwDataLen) > (DWORD)(*lpwMemLen))
	{
		// 數據長度大于內存大小,表示沒有解碼完
		
		// 數據長度減內存大小
		(*lpdwDataLen) -= (DWORD)(*lpwMemLen);
	}
	else
	{
		// 數據長度不大于內存大小,表示解碼將要完成
		
		// 內存大小就是剩余數據長度
		(*lpwMemLen)    = (WORD)(*lpdwDataLen);
		
		// EOF標志設置為TRUE
		(*lpbEOF)       = TRUE;
	}
	
	// 讀取編碼數據
	file.Read(lpSrcBuff, (*lpwMemLen));
	
	// 返回
	return;
}

/*************************************************************************
 *
 * 函數名稱:
 *   DecodeGIF_LZW()
 *
 * 參數:
 *   CFile& file			- 源GIF文件
 *   LPSTR lpDIBBits		- 指向要保存的DIB圖像指針
 *   LPGIFD_VAR lpGIFDVar	- 指向GIFC_VAR結構的指針
 *	 WORD wWidthBytes		- 每行圖像字節數
 *
 * 返回值:
 *   無
 *
 * 說明:
 *   該函數對指定GIF_LZW編碼數據進行解碼。
 *
 *************************************************************************/
void WINAPI DecodeGIF_LZW(CFile& file, LPSTR lpDIBBits,
						  LPGIFD_VAR lpGIFDVar,WORD wWidthBytes)
{
	// 指向編碼后圖像數據的指針
	BYTE *	lpDst;
	
	// 內存分配句柄
	HANDLE hPrefix;
	HANDLE hSuffix;
	HANDLE hStack;
	HANDLE hImage;
	
	// 用于字串表搜索的索引
	LPWORD lpwPrefix;
	LPBYTE lpbySuffix;
	LPBYTE lpbyStack;
	LPBYTE lpbyStackBgn;
	
	// 指向圖像當前行解碼結果的指針
	LPSTR  lpImageBgn;
	
	// 指向當前編碼像素的指針
	LPSTR  lpImage;
	
	// 計算當前數據圖像的偏移量
	DWORD  dwDataNdx;
	
	// LZW_CLEAR
	WORD   wLZW_CLEAR;
	
	// LZW_EOI
	WORD   wLZW_EOI;
	
	// LZW_MinCodeLen
	BYTE   byLZW_MinCodeLen;
	
	// 字串表索引
	WORD   wNowTableNdx;
	WORD   wTopTableNdx;
	
	// 當前圖像的行數
	WORD   wRowNum;
	
	// 計數
	WORD   wWidthCnt;
	WORD   wBitCnt;
	WORD   wRowCnt;
	
	// 循環變量
	WORD   wi;
	
	// 交錯方式存儲時每次增加的行數
	WORD   wIncTable[5]  = { 8,8,4,2,0 }; 
	
	// 交錯方式存儲時起始行數
	WORD   wBgnTable[5]  = { 0,4,2,1,0 }; 
	
	// 塊大小
	BYTE   byBlockSize;
	
	// 塊索引
	BYTE   byBlockNdx;
	
	DWORD  dwData;
	
	// 當前編碼
	WORD   wCode;
	
	// 上一個編碼
	WORD   wOldCode;
	
	// 臨時索引
	WORD   wTempNdx;
	
	WORD   wCodeMask[13] = {0x0000,
							0x0001,0x0003,0x0007,0x000F,
							0x001F,0x003F,0x007F,0x00FF,
							0x01FF,0x03FF,0x07FF,0x0FFF
							};
	
	BYTE   byLeftBits;
	BYTE   byFirstChar;
	BYTE   byCode;
	BYTE   byCurrentBits;
	BYTE   byPass;
	
	// 臨時字節變量
	BYTE   byTempChar;
	
	// 給字串表分配內存
	hPrefix          = GlobalAlloc(GHND,(DWORD)(MAX_TABLE_SIZE<<1));
	hSuffix          = GlobalAlloc(GHND,(DWORD)MAX_TABLE_SIZE);
	hStack           = GlobalAlloc(GHND,(DWORD)MAX_TABLE_SIZE);
	hImage           = GlobalAlloc(GHND,(DWORD)wWidthBytes);
	
	// 鎖定內存
	lpwPrefix        = (LPWORD)GlobalLock(hPrefix);
	lpbySuffix       = (LPBYTE)GlobalLock(hSuffix);
	lpbyStack        = (LPBYTE)GlobalLock(hStack);
	lpbyStackBgn     = lpbyStack;
	lpImage          = (LPSTR)GlobalLock(hImage);
	lpImageBgn       = lpImage;
	
	// 讀取GIF LZW最小編碼大小
	byLZW_MinCodeLen = *lpGIFDVar->lpBgnBuff++;
	
	byCurrentBits    = byLZW_MinCodeLen + (BYTE)0x01;
	
	// 計算LZW_CLEAR
	wLZW_CLEAR       = 1 << byLZW_MinCodeLen;
	
	// 計算LZW_EOI
	wLZW_EOI         = wLZW_CLEAR + 1;
	
	// 計算字串表索引
	wNowTableNdx     = wLZW_CLEAR + 2;
	wTopTableNdx     = 1 << byCurrentBits;
	
	// 賦初值
	dwData           = 0UL;
	wBitCnt          = lpGIFDVar->wBits;
	wRowNum          = 0;
	wRowCnt          = 1;
	wWidthCnt        = 0;
	wCode            = 0;
	wOldCode         = 0xFFFF;
	byBlockSize      = 0x01;
	byBlockNdx       = 0x00;
	byLeftBits       = 0x00;
	byTempChar       = 0x00;
	byPass           = 0x00;
	
	// 讀取下一個編碼
	while(byLeftBits < byCurrentBits)
	{
		// 讀取下一個字符
		
		// 判斷是否讀完一個數據塊
		if (++byBlockNdx == byBlockSize)
		{
			// 讀取下一個數據塊
			byBlockSize = *lpGIFDVar->lpBgnBuff++;
			byBlockNdx  = 0x00;
			
			// 判斷是否讀完
			if ((lpGIFDVar->lpBgnBuff == lpGIFDVar->lpEndBuff) &&
			    !lpGIFDVar->bEOF)
			{
				// 讀取下一個數據塊
				ReadSrcData(file,&lpGIFDVar->wMemLen,
							&lpGIFDVar->dwDataLen,
							lpGIFDVar->lpDataBuff,&lpGIFDVar->bEOF);
				
				// 指針重新賦值
				lpGIFDVar->lpBgnBuff = lpGIFDVar->lpDataBuff;
				lpGIFDVar->lpEndBuff = lpGIFDVar->lpBgnBuff + lpGIFDVar->wMemLen;
			}
		}
		
		// 下一個字符
		byCode      = *lpGIFDVar->lpBgnBuff++;
		
		// 移位
		dwData     |= ((DWORD)byCode << byLeftBits);
		byLeftBits += 0x08;
		
		// 判斷是否讀完
		if ((lpGIFDVar->lpBgnBuff == lpGIFDVar->lpEndBuff) &&
		    !lpGIFDVar->bEOF)
		{
			// 讀取下一個數據塊
			ReadSrcData(file,&lpGIFDVar->wMemLen,
						&lpGIFDVar->dwDataLen,
						lpGIFDVar->lpDataBuff,&lpGIFDVar->bEOF);
			
			// 指針重新賦值
			lpGIFDVar->lpBgnBuff = lpGIFDVar->lpDataBuff;
			lpGIFDVar->lpEndBuff = lpGIFDVar->lpBgnBuff + lpGIFDVar->wMemLen;
		}
	}
	
	wCode       = (WORD)dwData & wCodeMask[byCurrentBits];
	dwData    >>= byCurrentBits;
	byLeftBits -= byCurrentBits;
	
	// 解碼
	while(wCode != wLZW_EOI)
	{
		// 當前編碼不是LZW_EOI碼
		
		// 判斷是否是LZW_CLEAR碼
		if (wCode == wLZW_CLEAR)
		{
			// 是LZW_CLEAR,清除字串表
			
			// 重新初始化字串表
			for(wi = 0; wi < wLZW_CLEAR; wi++)
			{
				*(lpwPrefix  + wi)  = 0xFFFF;
				*(lpbySuffix + wi) = (BYTE)wi;
			}
			
			for(wi = wNowTableNdx; wi < MAX_TABLE_SIZE; wi++)
			{
				*(lpwPrefix+wi)  = 0xFFFF;
				*(lpbySuffix+wi) = 0x00;
			}
			
			byCurrentBits = byLZW_MinCodeLen + (BYTE)0x01;
			wNowTableNdx  = wLZW_CLEAR + 2;
			wTopTableNdx  = 1 << byCurrentBits;
			wOldCode      = 0xFFFF;
			
			// 獲取下一個編碼
			while(byLeftBits < byCurrentBits)
			{
				// 讀取下一個字符
				
				// 判斷是否讀完一個數據塊
				if (++byBlockNdx == byBlockSize)
				{
					// 讀取下一個數據塊
					byBlockSize = *lpGIFDVar->lpBgnBuff++;
					byBlockNdx  = 0x00;
					
					// 判斷是否讀完
					if ((lpGIFDVar->lpBgnBuff == lpGIFDVar->lpEndBuff) &&
						!lpGIFDVar->bEOF)
					{
						// 讀取下一個數據塊
						ReadSrcData(file, &lpGIFDVar->wMemLen,
									&lpGIFDVar->dwDataLen,
									lpGIFDVar->lpDataBuff,
									&lpGIFDVar->bEOF);
						
						// 指針重新賦值
						lpGIFDVar->lpBgnBuff = lpGIFDVar->lpDataBuff;
						lpGIFDVar->lpEndBuff = lpGIFDVar->lpBgnBuff +
											   lpGIFDVar->wMemLen;
					}
				}
				byCode      = *lpGIFDVar->lpBgnBuff++;
				dwData     |= ((DWORD)byCode << byLeftBits);
				byLeftBits += 0x08;
				
				// 判斷是否讀完
				if ((lpGIFDVar->lpBgnBuff == lpGIFDVar->lpEndBuff) &&
					 !lpGIFDVar->bEOF)
				{
					// 讀取下一個數據塊
					ReadSrcData(file,&lpGIFDVar->wMemLen,
								&lpGIFDVar->dwDataLen,
								lpGIFDVar->lpDataBuff,&lpGIFDVar->bEOF);
					
					// 指針重新賦值
					lpGIFDVar->lpBgnBuff = lpGIFDVar->lpDataBuff;
					lpGIFDVar->lpEndBuff = lpGIFDVar->lpBgnBuff + lpGIFDVar->wMemLen;
				}
			}
			wCode       = (WORD)dwData & wCodeMask[byCurrentBits];
			dwData    >>= byCurrentBits;
			byLeftBits -= byCurrentBits;
			
			// 判斷編碼是否為LZW_EOI
			if (wCode!=wLZW_EOI)
			{
				// 這里沒有用到lpbyStack[0]
				lpbyStack  ++;
				
				// 將數據壓入堆棧
				while((*(lpwPrefix+wCode)) != 0xFFFF)
				{
					*lpbyStack++ = *(lpbySuffix+wCode);
					wCode        = *(lpwPrefix+wCode);
				}
				*lpbyStack  = *(lpbySuffix+wCode);
				byFirstChar = *lpbyStack;
				
				// 輸出數據
				while(lpbyStack>lpbyStackBgn)
				{
					byTempChar |= (*lpbyStack-- << (8-wBitCnt));
					
					if (wBitCnt==8)
					{
						*lpImage++ = byTempChar;
						byTempChar = 0x00;
						wBitCnt    = lpGIFDVar->wBits;
					}
					else
					{
						wBitCnt   += lpGIFDVar->wBits;
					}
					
					wWidthCnt  ++;
					
					if (wWidthCnt==lpGIFDVar->wWidth)
					{
						if (wBitCnt!=lpGIFDVar->wBits)
						{
							*lpImage   = byTempChar;
							byTempChar = 0x00;
							wBitCnt    = lpGIFDVar->wBits;
						}
						
						// 圖像當前行偏移量
						dwDataNdx = (DWORD)(lpGIFDVar->wDepth - 1 - wRowNum) * (DWORD)wWidthBytes;
						
						// 圖像當前行起始位置
						lpDst = (BYTE *)lpDIBBits + dwDataNdx;
						
						// 賦值
						memcpy(lpDst, lpImageBgn, wWidthBytes);
						
						lpImage   = lpImageBgn;
						
						// 判斷是否按照交錯方式保存
						if (lpGIFDVar->bInterlace)
						{
							// 交錯方式
							
							// 計算下一行的行號
							wRowNum += wIncTable[byPass];
							if (wRowNum >= lpGIFDVar->wDepth)
							{
								byPass ++;
								wRowNum = wBgnTable[byPass];
							}
						}
						else
						{
							// 非交錯方式,行號直接加1
							wRowNum ++;
						}
						wWidthCnt = 0;
					}
				}
			}
		}
		else
		{
			// 這里沒有用到lpbyStack[0]
			lpbyStack  ++;
			
			// 判斷字符串是否在字串表中
			if (wCode < wNowTableNdx)
			{
				// 不在字串表中
				wTempNdx   = wCode;
			}
			else
			{
				// 在字串表中
				wTempNdx     = wOldCode;
				*lpbyStack++ = byFirstChar;
			}
			
			// 將數據壓入堆棧
			while((*(lpwPrefix+wTempNdx)) != 0xFFFF)
			{
				*lpbyStack++ = *(lpbySuffix+wTempNdx);
				wTempNdx     = *(lpwPrefix+wTempNdx);
			}
			*lpbyStack  = *(lpbySuffix+wTempNdx);
			byFirstChar = *lpbyStack;
			
			// 將字符串添加到字串表中
			*(lpwPrefix+wNowTableNdx)  = wOldCode;
			*(lpbySuffix+wNowTableNdx) = byFirstChar;
			if (++wNowTableNdx==wTopTableNdx && byCurrentBits<12)
			{
				byCurrentBits ++;
				wTopTableNdx   = 1 << byCurrentBits;
			}
			
			// 輸出數據
			while(lpbyStack>lpbyStackBgn)
			{
				byTempChar |= (*lpbyStack-- << (8-wBitCnt));
				if (wBitCnt==8)
				{
					*lpImage++ = byTempChar;
					byTempChar = 0x00;
					wBitCnt    = lpGIFDVar->wBits;
				}
				else
				{
					wBitCnt   += lpGIFDVar->wBits;
				}
				
				wWidthCnt  ++;
				if (wWidthCnt==lpGIFDVar->wWidth)
				{
					if (wBitCnt!=lpGIFDVar->wBits)
					{
						*lpImage   = byTempChar;
						byTempChar = 0x00;
						wBitCnt    = lpGIFDVar->wBits;
					}
					
					// 圖像當前行偏移量
					dwDataNdx = (DWORD)(lpGIFDVar->wDepth - 1 - wRowNum) * (DWORD)wWidthBytes;
					
					// 圖像當前行起始位置
					lpDst = (BYTE *)lpDIBBits + dwDataNdx;
					
					// 賦值
					memcpy(lpDst, lpImageBgn, wWidthBytes);
					
					lpImage   = lpImageBgn;
					
					// 判斷是否按照交錯方式保存
					if (lpGIFDVar->bInterlace)
					{
						// 交錯方式
						
						// 計算下一行的行號
						wRowNum += wIncTable[byPass];
						if (wRowNum >= lpGIFDVar->wDepth)
						{
							byPass ++;
							wRowNum = wBgnTable[byPass];
						}
					}
					else
					{
						// 非交錯方式,行號直接加1
						wRowNum ++;
					}
					wWidthCnt = 0;
				}
			}
		}
		wOldCode = wCode;
		
		// 讀取下一個編碼
		while(byLeftBits < byCurrentBits)
		{
			// 讀取下一個字符
			
			// 判斷是否讀完一個數據塊
			if (++byBlockNdx == byBlockSize)
			{
				// 讀取下一個數據塊
				byBlockSize = *lpGIFDVar->lpBgnBuff++;
				byBlockNdx  = 0x00;
				
				// 判斷是否讀完
				if ((lpGIFDVar->lpBgnBuff == lpGIFDVar->lpEndBuff) &&
					 !lpGIFDVar->bEOF)
				{
					// 讀取下一個數據塊
					ReadSrcData(file,&lpGIFDVar->wMemLen,
								&lpGIFDVar->dwDataLen,
								lpGIFDVar->lpDataBuff,&lpGIFDVar->bEOF);
					
					// 指針重新賦值
					lpGIFDVar->lpBgnBuff = lpGIFDVar->lpDataBuff;
					lpGIFDVar->lpEndBuff = lpGIFDVar->lpBgnBuff + lpGIFDVar->wMemLen;
				}
			}
			byCode      = *lpGIFDVar->lpBgnBuff++;
			dwData     |= ((DWORD)byCode << byLeftBits);
			byLeftBits += 0x08;
			
			// 判斷是否讀完
			if ((lpGIFDVar->lpBgnBuff == lpGIFDVar->lpEndBuff) &&
				  !lpGIFDVar->bEOF)
			{
				// 讀取下一個數據塊
				ReadSrcData(file,&lpGIFDVar->wMemLen,
							&lpGIFDVar->dwDataLen,
							lpGIFDVar->lpDataBuff,&lpGIFDVar->bEOF);
				
				// 指針重新賦值
				lpGIFDVar->lpBgnBuff = lpGIFDVar->lpDataBuff;
				lpGIFDVar->lpEndBuff = lpGIFDVar->lpBgnBuff + lpGIFDVar->wMemLen;
			}
		}
		wCode       = (WORD)dwData & wCodeMask[byCurrentBits];
		dwData    >>= byCurrentBits;
		byLeftBits -= byCurrentBits;
	}
	
	// 釋放內存
	GlobalUnlock(hPrefix);
	GlobalUnlock(hSuffix);
	GlobalUnlock(hStack);
	GlobalFree(hPrefix);
	GlobalFree(hSuffix);
	GlobalFree(hStack);
	
	// 返回
	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丝袜高跟美女视频| 成人黄色一级视频| 久久亚洲春色中文字幕久久久| 九一九一国产精品| 亚洲三级电影网站| 欧美亚洲动漫精品| 激情久久五月天| 亚洲人成网站影音先锋播放| 成人国产亚洲欧美成人综合网 | 久久精品免视看| 成人av影院在线| 免费一区二区视频| 日韩专区在线视频| 国产精品久线观看视频| 日韩成人一级大片| 国产精品人人做人人爽人人添| 久久久亚洲精品石原莉奈| 国产三级久久久| 国产亚洲欧美一级| 欧美激情一区二区三区不卡| 久久无码av三级| 国产精品伦一区| 一区二区三区中文免费| 亚洲国产精品久久不卡毛片 | 亚洲欧洲精品一区二区精品久久久 | 国产清纯白嫩初高生在线观看91 | 国产精品久久久久婷婷| 久久久久成人黄色影片| 日韩精品一区二区三区中文不卡| 欧美日韩免费高清一区色橹橹| 色综合欧美在线视频区| 国产成人av电影在线观看| 美女任你摸久久| 香蕉成人伊视频在线观看| 亚洲欧美日韩一区| 亚洲成a人片在线观看中文| 亚洲电影一级片| 亚洲午夜免费电影| 怡红院av一区二区三区| 亚洲韩国精品一区| 久久成人综合网| 国产夫妻精品视频| 麻豆成人在线观看| 成人一二三区视频| 91视频一区二区三区| 在线亚洲人成电影网站色www| 欧美在线一区二区| 精品国产亚洲一区二区三区在线观看 | 日韩av一区二区三区四区| 欧美精品一区二区三区蜜桃| 51精品视频一区二区三区| 色狠狠色狠狠综合| 99久精品国产| av亚洲产国偷v产偷v自拍| 国内国产精品久久| 国产成人午夜精品影院观看视频| 国产成人自拍网| 欧美视频一区在线| 欧美精品一区二区在线播放| 国产精品久久久久久久第一福利 | 6080午夜不卡| 国产精品免费av| 麻豆精品视频在线观看视频| 国产成人综合自拍| 欧美日韩一级片网站| 久久蜜桃av一区精品变态类天堂 | 久久女同互慰一区二区三区| 一区二区三区产品免费精品久久75| 日韩av网站免费在线| 色诱视频网站一区| 精品欧美一区二区在线观看| 亚洲国产日韩综合久久精品| 日本va欧美va瓶| 欧美日韩aaaaaa| 亚洲少妇30p| 99re成人在线| 综合久久久久久| 成a人片国产精品| 国产精品你懂的在线欣赏| 日日夜夜免费精品| 欧美日韩一级二级三级| 亚洲综合久久久久| 欧美在线free| 午夜精品久久久久久久| 欧美性色aⅴ视频一区日韩精品| 亚洲天堂av老司机| 国精产品一区一区三区mba视频| 日韩欧美一级二级三级| 美脚の诱脚舐め脚责91| 欧美电影免费观看高清完整版在 | 成人国产精品免费观看视频| 欧美极品xxx| 97久久人人超碰| 亚洲国产精品天堂| 欧美人成免费网站| 亚洲三级免费观看| 欧美卡1卡2卡| www欧美成人18+| aa级大片欧美| 久久不见久久见免费视频7| 国产精品国产三级国产普通话蜜臀 | 日本精品视频一区二区| 免费看欧美美女黄的网站| 一区在线观看视频| 精品国产乱码久久久久久浪潮| 91社区在线播放| 国产麻豆精品一区二区| 午夜久久福利影院| 亚洲精品老司机| 国产欧美一区二区精品婷婷| 日韩视频一区在线观看| 色爱区综合激月婷婷| 成人午夜激情视频| 国产精品一区二区男女羞羞无遮挡 | 欧美综合视频在线观看| 成人动漫视频在线| 国产精品一区二区三区99| 蜜桃精品在线观看| 日本强好片久久久久久aaa| 一区二区三区在线播| 国产精品卡一卡二卡三| 国产欧美日韩精品一区| 国产欧美日韩不卡| 日本一区二区成人在线| 国产欧美久久久精品影院| 久久久久青草大香线综合精品| 精品久久99ma| 日韩欧美国产成人一区二区| 精品国产区一区| 久久精品在线免费观看| 国产三级三级三级精品8ⅰ区| 国产三级精品视频| 中文字幕视频一区| 亚洲丶国产丶欧美一区二区三区| 亚洲风情在线资源站| 亚洲成人动漫在线观看| 免费人成精品欧美精品| 国产乱码精品一区二区三区av| 国产高清精品在线| 色网站国产精品| 欧美日韩国产精选| 亚洲精品在线免费观看视频| 国产人成亚洲第一网站在线播放| 综合在线观看色| 久久国产夜色精品鲁鲁99| 春色校园综合激情亚洲| 日本高清视频一区二区| 日韩一区二区精品| 伊人一区二区三区| 久久激情五月婷婷| 91国偷自产一区二区三区成为亚洲经典| 欧美三级韩国三级日本三斤| ww亚洲ww在线观看国产| 亚洲综合无码一区二区| 激情综合色播激情啊| 在线观看av一区| 国产精品嫩草影院com| 男女男精品视频| 99精品久久只有精品| 精品久久久久久久一区二区蜜臀| 日韩一区在线免费观看| 韩国成人精品a∨在线观看| 欧美天堂一区二区三区| 国产精品福利影院| 国产精品1区2区3区| 日韩欧美区一区二| 奇米影视一区二区三区小说| 在线观看中文字幕不卡| 日韩一区有码在线| 不卡av在线网| 1024成人网| 一本久道中文字幕精品亚洲嫩| 中文文精品字幕一区二区| 国产精品一区二区三区四区 | 一区二区三区日韩欧美| 成人精品电影在线观看| 国产精品毛片大码女人| 国产sm精品调教视频网站| 久久精品一区八戒影视| 国产精品综合网| 国产精品水嫩水嫩| 国产精一品亚洲二区在线视频| 久久综合九色综合97婷婷女人| 国产在线观看一区二区| 精品成人佐山爱一区二区| 国产激情视频一区二区在线观看| 久久这里只有精品6| av中文字幕一区| 亚洲国产cao| 久久久精品欧美丰满| 色综合色狠狠天天综合色| 性做久久久久久久久| 久久一区二区三区四区| 99国产精品一区| 欧美a一区二区| 亚洲欧洲国产日韩| 日韩精品一区二区三区四区| 成人性色生活片免费看爆迷你毛片| 尤物av一区二区| 精品国产1区2区3区|