在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux開發_BMP圖片編程(翻轉、添加水印)

DS小龍哥-嵌入式技術 ? 2022-09-17 15:33 ? 次閱讀

【摘要】 接收BMP圖片編程,完成BMP圖片翻轉、水印添加等知識點。

一、攝像頭練習

1.?改進拍照程序,至少BMP圖片數據要正常,還可以將.c文件分隔成3個.c文件。

24位的真彩色BMP圖片的構造:分為3個部分。

(1)?存放BMP頭數據—主要存放BMP屬性,RGB數據偏移量

(2)?存放BMP信息數據—存放寬度、高度、顏色位數

(3)?存放BMP圖片源數據—RGB888

注意:

(1)?BMP圖片一行(寬度)的數據必須是4的倍數。

(2)?BMP圖片的源數據是從下到上,從左到右

BMP、JPG、PNG、MP4、MP3

2.?課后擴展知識: 拍照圖片上加水印。比如:時間水印、或者自己的名字

(1)?第一種圖片水印: 圖片重疊。

(2)?在控制臺終端屏幕上使用*號打印自己名字。

要求:

(1)?添加文字水印和數字水印。比如: 添加自己的名字和日期

(2)?實現任意位置添加任意的水印。

(3)?實現縮放功能,將圖片可以任意放大和縮小。

3.?精簡遠程攝像頭監控的代碼文件。

將網頁監控相關的代碼文件單獨提取出來進行編譯,實現遠程監控的效果。

使用gcc單獨編譯實現。(uvc)

分析: 程序是依靠Makefile文件已經編譯。首先從Makefile文件入手。

主要修改的文件:mjpg_streamer.c

1.?改進拍照程序,至少BMP圖片數據要正常,還可以將.c文件分隔成3個.c文件。

24位的真彩色BMP圖片的構造:分為3個部分。

(1)?存放BMP頭數據—主要存放BMP屬性,RGB數據偏移量

(2)?存放BMP信息數據—存放寬度、高度、顏色位數

(3)?存放BMP圖片源數據—RGB888

注意:

(1)?BMP圖片一行(寬度)的數據必須是4的倍數。

(2)?BMP圖片的源數據是從下到上,從左到右

BMP、JPG、PNG、MP4、MP3

2.?課后擴展知識: 拍照圖片上加水印。比如:時間水印、或者自己的名字

(1)?第一種圖片水印: 圖片重疊。

(2)?在控制臺終端屏幕上使用*號打印自己名字。

pYYBAGMlP4mAUtE9AACFGMXStLI331.png

要求:

(1)?添加文字水印和數字水印。比如: 添加自己的名字和日期

(2)?實現任意位置添加任意的水印。

(3)?實現縮放功能,將圖片可以任意放大和縮小。

3.?精簡遠程攝像頭監控的代碼文件。

將網頁監控相關的代碼文件單獨提取出來進行編譯,實現遠程監控的效果。

使用gcc單獨編譯實現。(uvc)

分析: 程序是依靠Makefile文件已經編譯。首先從Makefile文件入手。

任務2:漢字庫的制作與使用

poYBAGMlP4mABBmSAAB9DhpyxMg380.png

需要解決的問題:

1.?如何從漢字庫里提取自己想要的點陣數據 。比如: 萬邦易嵌

漢字庫編碼還是GBK編碼: 有特定的公式可以計算點陣碼的位置。

2.?如何區分中文還有英文

數據大于0x80就是中文,其他就是英文數據。 變量必須是: 無符號類型

注意: 寫代碼需要在中文編碼的情況下編寫!

3.?英文數據該如何取模?

從空格開始到~號結束 ,連續95個數據。

2.1 BMP圖片縮放

#include 
#include 

int PicZoom(unsigned char *s_buff,unsigned int s_width,unsigned int s_height,unsigned char *buff,unsigned int width,unsigned int height);
void *my_memcpy(void *v_dst,const void *v_src,unsigned char c);

#pragma pack(1)   /* 必須在結構體定義之前使用,這是為了讓結構體中各成員按1字節對齊 */
/*需要文件信息頭:14個字節 */
struct BITMAPFILEHEADER
{
	unsigned short bfType;      //保存圖片類似。 'BM'
	unsigned long  bfSize;      //圖片的大小
	unsigned short bfReserved1;
	unsigned short bfReserved2;
	unsigned long  bfOffBits;  //RGB數據偏移地址
};

/* 位圖信息頭 */
struct BITMAPINFOHEADER { /* bmih */
	unsigned long  biSize;      //結構體大小
	unsigned long  biWidth;		//寬度
	unsigned long  biHeight;	//高度
	unsigned short biPlanes;
	unsigned short biBitCount;	//顏色位數
	unsigned long  biCompression;
	unsigned long  biSizeImage;
	unsigned long  biXPelsPerMeter;
	unsigned long  biYPelsPerMeter;
	unsigned long  biClrUsed;
	unsigned long  biClrImportant;
};

#define NEW_FILE_NAME "new.bmp" //縮放后的新圖片名稱
#define SRC_FILE_NAME "src.bmp" //源圖片名稱
/*
圖片放大與縮小示例
*/
int main()
{
	struct BITMAPFILEHEADER src_head;  //源文件頭數據
	struct BITMAPINFOHEADER src_info;  //源文件參數結構
	struct BITMAPFILEHEADER new_head;  //新文件頭數據
	struct BITMAPINFOHEADER new_info;  //新文件參數結構
	unsigned int new_Width;			   //縮放后的寬度
	unsigned int new_Height;		   //縮放后的高度
	unsigned char *new_buff;           //存放新圖片的數據
	unsigned char *src_buff;           //存放源圖片的數據
	unsigned int cnt=0;

	/*1. 打開圖片文件*/
	FILE *src_file=fopen(SRC_FILE_NAME,"rb");
	FILE *new_file=fopen(NEW_FILE_NAME,"wb");
	if(src_file==NULL||new_file==NULL)
	{
		printf("%s 源文件打開失敗!\r\n",SRC_FILE_NAME);
		return;
	}
	
	/*2. 讀取源圖片參數*/
	fread(&src_head,sizeof(struct BITMAPFILEHEADER),1,src_file);
	fread(&src_info,sizeof(struct BITMAPINFOHEADER),1,src_file);
	printf("源圖片尺寸:w=%d h=%d\r\n",src_info.biWidth,src_info.biHeight);

	/*3. 獲取新圖片的尺寸*/
	printf("輸入新圖片的寬度: ");
	scanf("%d",&new_Width);
	printf("輸入新圖片的高度: ");
	scanf("%d",&new_Height);
	printf("新圖片尺寸:w=%d h=%d\r\n",new_Width,new_Height);

	/*4. 申請存放圖片數據的空間*/
	src_buff=malloc(src_info.biWidth*src_info.biHeight*3);
	new_buff=malloc(new_Width*new_Height*3);
	if(new_buff==NULL||src_buff==NULL)
	{
		printf("malloc申請空間失敗!\r\n");
		return -1;
	}

	/*5. 讀取源圖片RGB數據*/
	fseek(src_file,src_head.bfOffBits,SEEK_SET); //移動文件指針到RGB數據位置
	fread(src_buff,1,src_info.biWidth*src_info.biHeight*3,src_file); //讀取源數據

	/*6. 縮放圖片*/
	if(PicZoom(src_buff,src_info.biWidth,src_info.biHeight,new_buff,new_Width,new_Height))
	{
		printf("圖片縮放處理失敗!\r\n");
		return -1;
	}

	/*7. 寫入新圖片數據*/
	//填充文件頭
	memset(&new_head,0,sizeof(struct BITMAPFILEHEADER));
	new_head.bfType=0x4d42;
	new_head.bfSize=54+new_Width*new_Height*3;
	new_head.bfOffBits=54;
	//填充文件參數
	memset(&new_info,0,sizeof(struct BITMAPINFOHEADER));
	new_info.biSize=sizeof(struct BITMAPINFOHEADER);
	new_info.biWidth=new_Width;
	new_info.biHeight=new_Height;
	new_info.biPlanes=1;
	new_info.biBitCount=24;
	//寫入文件數據
	fwrite(&new_head,sizeof(struct BITMAPFILEHEADER),1,new_file);
	fwrite(&new_info,sizeof(struct BITMAPINFOHEADER),1,new_file);
	fseek(new_file,new_head.bfOffBits,SEEK_SET); //移動文件指針到RGB數據位置
	cnt=fwrite(new_buff,1,new_info.biWidth*new_info.biHeight*3,new_file); //寫數據

	/*8. 關閉圖片文件*/
	fclose(new_file);
	fclose(src_file);

	printf("%s 新圖片創建成功! 路徑:程序運行路徑下\r\n",NEW_FILE_NAME);
	return 0;
}
/**********************************************************************
* 函數名稱: PicZoom
* 功能描述: 近鄰取樣插值方法縮放圖片
*            注意該函數會分配內存來存放縮放后的圖片,用完后要用free函數釋放掉
*            "近鄰取樣插值"的原理請參考網友"lantianyu520"所著的"圖像縮放算法"
* 輸入參數:  ptOriginPic - 內含原始圖片的象素數據
*             ptZoomPic    - 內含縮放后的圖片的象素數據
* 輸出參數: 無
* 返 回 值: 0 - 成功, 其他值 - 失敗
***********************************************************************/
int PicZoom(unsigned char *ptOriginPic_aucPixelDatas,unsigned int ptOriginPic_iWidth,unsigned int ptOriginPic_iHeight,unsigned char *ptZoomPic_aucPixelDatas,unsigned int ptZoomPic_iWidth,unsigned int ptZoomPic_iHeight)
{
	unsigned int ptOriginPic_iLineBytes=ptOriginPic_iWidth*3; //一行的字節數
	unsigned int ptZoomPic_iLineBytes=ptZoomPic_iWidth*3;  //一行的字節數

	unsigned long dwDstWidth=ptZoomPic_iWidth;
	unsigned long* pdwSrcXTable;
	unsigned long x;
	unsigned long y;
	unsigned long dwSrcY;
	unsigned char *pucDest;
	unsigned char *pucSrc;
	unsigned long dwPixelBytes=3; //像素字節
	pdwSrcXTable=malloc(sizeof(unsigned long) * dwDstWidth);
	if(NULL==pdwSrcXTable)
	{
		return -1;
	}

	for(x=0; x < dwDstWidth; x++)//生成表 pdwSrcXTable
	{
		pdwSrcXTable[x]=(x*ptOriginPic_iWidth/ptZoomPic_iWidth);
	}

	for(y=0; y < ptZoomPic_iHeight; y++)
	{
		dwSrcY=(y * ptOriginPic_iHeight/ptZoomPic_iHeight);

		pucDest=ptZoomPic_aucPixelDatas + y * ptZoomPic_iLineBytes;
		pucSrc=ptOriginPic_aucPixelDatas+dwSrcY * ptOriginPic_iLineBytes;

		for(x=0; x ;>

2.2 BMP圖片添加水印

#include "savebmp.h"
#include "yuvtorgb.h"

/* 圖片的象素數據 */
typedef struct PixelDatas {
	int iWidth;      /* 寬度: 一行有多少個象素 */
	int iHeight;     /* 高度: 一列有多少個象素 */
	int iBpp;        /* 一個象素用多少位來表示 */
	int iLineBytes;  /* 一行數據有多少字節 */
	int iTotalBytes; /* 所有字節數 */ 
	unsigned char *VideoBuf; //存放一幀攝像頭的數據
	//指向了存放攝像頭數據的空間地址
}T_PixelDatas;

T_PixelDatas Pixedata; //存放實際的圖像數據

/*
		USB攝像頭相關參數定義
*/
struct v4l2_buffer tV4l2Buf;
int iFd;
int ListNum;
unsigned char* pucVideBuf[4];  // 視頻BUFF空間地址
void camera_pthread(void);

int main(int argc ,char *argv[])
{
	if(argc!=2)
	{
		printf("./app /dev/videoX\n");
		return -1;
	}
	
	camera_init(argv[1]);  //攝像頭設備初始化

	//開始采集攝像頭數據,并編碼保存為BMP圖片
	camera_pthread();
	return 0;
}
//攝像頭設備的初始化
int camera_init(char *video)
{
	int i=0;
	int cnt=0;
	//定義攝像頭驅動的BUF的功能捕獲視頻
	int iType = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	
	/* 1、打開視頻設備 */
	iFd = open(video,O_RDWR);
	if(iFd < 0)
	{
		printf("攝像頭設備打開失敗!\n");
		return 0;
	}
	
	struct v4l2_format  tV4l2Fmt;
	
	/* 2、 VIDIOC_S_FMT 設置攝像頭使用哪種格式 */
	memset(&tV4l2Fmt, 0, sizeof(struct v4l2_format));
	tV4l2Fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //視頻捕獲

	//設置攝像頭輸出的圖像格式
    tV4l2Fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_YUYV;

	/*設置輸出的尺寸*/
	tV4l2Fmt.fmt.pix.width       = 640;
	tV4l2Fmt.fmt.pix.height      = 480;
	tV4l2Fmt.fmt.pix.field       = V4L2_FIELD_ANY;
	
    //VIDIOC_S_FMT 設置攝像頭的輸出參數
    ioctl(iFd, VIDIOC_S_FMT, &tV4l2Fmt); 

	//打印攝像頭實際的輸出參數
	printf("Support Format:%d\n",tV4l2Fmt.fmt.pix.pixelformat);
	printf("Support width:%d\n",tV4l2Fmt.fmt.pix.width);
	printf("Support height:%d\n",tV4l2Fmt.fmt.pix.height);

	/* 3、VIDIOC_REQBUFS  申請buffer */
	/* 初始化Pixedata結構體,為轉化做準備 */
	Pixedata.iBpp =24;								
	//高度 和寬度的賦值
	Pixedata.iHeight = tV4l2Fmt.fmt.pix.height;
	Pixedata.iWidth = tV4l2Fmt.fmt.pix.width;

	//一行所需要的字節數
	Pixedata.iLineBytes = Pixedata.iWidth*Pixedata.iBpp/8;
	//一幀圖像的字節數
	Pixedata.iTotalBytes = Pixedata.iLineBytes * Pixedata.iHeight;
	
	Pixedata.VideoBuf=malloc(Pixedata.iTotalBytes); //申請存放圖片數據空間

	//v412請求命令
	struct v4l2_requestbuffers tV4l2ReqBuffs;
	
	memset(&tV4l2ReqBuffs, 0, sizeof(struct v4l2_requestbuffers));

	/* 分配4個buffer:實際上由VIDIOC_REQBUFS獲取到的信息來決定 */
	tV4l2ReqBuffs.count   = 4; /*在內核空間里開辟4個空間*/
	
	/*支持視頻捕獲功能*/
	tV4l2ReqBuffs.type    = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	
	/* 表示申請的緩沖是支持MMAP(內存映射) */
	tV4l2ReqBuffs.memory  = V4L2_MEMORY_MMAP;
	
	/* 為分配buffer做準備 */
	ioctl(iFd, VIDIOC_REQBUFS, &tV4l2ReqBuffs);
	
	for (i = 0; i < tV4l2ReqBuffs.count; i++) 
	{
		memset(&tV4l2Buf, 0, sizeof(struct v4l2_buffer));
		tV4l2Buf.index = i; // 0  1 2 3
		tV4l2Buf.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;  /*支持視頻捕獲*/
		tV4l2Buf.memory = V4L2_MEMORY_MMAP;  /*支持內存映射*/

		/* 6、VIDIOC_QUERYBUF 確定每一個buffer的信息 并且 mmap */
		ioctl(iFd, VIDIOC_QUERYBUF, &tV4l2Buf);
		//映射空間地址
		pucVideBuf[i] = mmap(   	  /*返回用戶空間的地址*/
		          0,   				  /*表示系統自己制定地址*/
				  tV4l2Buf.length,   /*映射的長度*/
				  PROT_READ,          /*空間數據只讀*/
				  MAP_SHARED,         /*空間支持共享*/
				  iFd,                /*將要映射的文件描述符*/
				  tV4l2Buf.m.offset  /*從哪個位置開始映射,表示起始位置*/
				  );
		printf("mmap %d addr:%p\n",i,pucVideBuf[i]);
	}

	/* 4、VIDIOC_QBUF  放入隊列*/
    for (i = 0; i 在LCD上顯示:rgb888 */
	initLut();
	printf("開始采集數據.......\n");
//	while(1)
//	{
		FD_ZERO(&readfds);
		FD_SET(iFd,&readfds);
		select(iFd+1,&readfds,NULL,NULL,NULL);  /*檢測文件描述符是否發生了讀寫事件*/
	  
		memset(&tV4l2Buf, 0, sizeof(struct v4l2_buffer));
		tV4l2Buf.type    = V4L2_BUF_TYPE_VIDEO_CAPTURE; //類型
		tV4l2Buf.memory  = V4L2_MEMORY_MMAP; //存儲空間類型

		/* 9、VIDIOC_DQBUF    從隊列中取出 */
		error = ioctl(iFd, VIDIOC_DQBUF, &tV4l2Buf); //取出一幀數據
		ListNum = tV4l2Buf.index; //索引編號   0
		
		//將YUV轉換為RGB
		Pyuv422torgb32(pucVideBuf[ListNum],Pixedata.iWidth,Pixedata.iHeight,Pixedata.VideoBuf);
		
		//保存BMP
		save_bmp(Pixedata.VideoBuf,Pixedata.iWidth,Pixedata.iHeight); 
		
		memset(&tV4l2Buf, 0, sizeof(struct v4l2_buffer));
		tV4l2Buf.index  = ListNum;
		tV4l2Buf.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		tV4l2Buf.memory = V4L2_MEMORY_MMAP;
		error = ioctl(iFd, VIDIOC_QBUF, &tV4l2Buf);  /*將緩沖區再次放入隊列*/
//	}
};>
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 攝像頭
    +關注

    關注

    60

    文章

    4848

    瀏覽量

    95806
  • BMP
    BMP
    +關注

    關注

    0

    文章

    48

    瀏覽量

    17074
收藏 人收藏

    評論

    相關推薦

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之開發板測試

    1.以下圖為例,制作一張24位bmp格式的圖片圖片存放路徑:ELF 1開發板資料包\\03-例程源碼\\03-1 命令行例程源碼\\07_elf1_cmd_
    發表于 11-26 09:39

    飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之開發板測試

    1.以下圖為例,制作一張24位bmp格式的圖片圖片存放路徑:ELF 1開發板資料包\\03-例程源碼\\03-1 命令行例程源碼\\07_elf1_cmd_
    發表于 11-25 09:36

    飛凌嵌入式ElfBoard ELF 1板卡-LCD顯示圖片編程示例之顯示bmp圖片代碼

    注意:學習資料可在ElfBoard官方網站“資料”專區獲取。 本節用到的源碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-1 命令行例程源碼\\07_elf1_cmd_bmp bmp
    發表于 11-23 16:57

    Linux應用編程的基本概念

    Linux應用編程涉及到在Linux環境下開發和運行應用程序的一系列概念。以下是一些涵蓋Linux應用
    的頭像 發表于 10-24 17:19 ?240次閱讀

    基于ArkTS語言的OpenHarmony APP應用開發圖片處理

    (),rotate()接口實現對圖片的縮放,裁剪,旋轉功能。案例說明:發表評價頁面點擊添加圖片/照片,頁面跳轉到圖片選擇頁面。進入圖片選擇頁
    的頭像 發表于 09-20 08:07 ?604次閱讀
    基于ArkTS語言的OpenHarmony APP應用<b class='flag-5'>開發</b>:<b class='flag-5'>圖片</b>處理

    linux開發板和單片機開發的區別

    、PIC等,處理能力和內存容量相對較低。 操作系統 Linux開發板通常使用Linux操作系統,具有豐富的軟件資源和開發工具。單片機開發則通
    的頭像 發表于 08-30 15:30 ?930次閱讀

    Linux 驅動開發與應用開發,你知道多少?

    一、Linux驅動開發與應用開發的區別開發層次不同:Linux驅動開發主要是針對硬件設備進行
    的頭像 發表于 08-30 12:16 ?830次閱讀
    <b class='flag-5'>Linux</b> 驅動<b class='flag-5'>開發</b>與應用<b class='flag-5'>開發</b>,你知道多少?

    如何向Buildroot內添加外部APP

    Linux項目開發,如何在BuildRoot框架內添加外部APP呢?本文以quect-CM撥號軟件為例,做開發演示。
    的頭像 發表于 07-22 17:48 ?363次閱讀
    如何向Buildroot內<b class='flag-5'>添加</b>外部APP

    請問解碼bmp圖片時是否可以使用dma2d功能 ?

    請教下,解碼bmp圖片時是否可以使用dma2d功能 ? 具體描述如下: 沒有使用 emWin 就是先讀取整副 bmp 的數據,之后解碼暫存,之后使用 dma2d 功能顯示, 有沒有這個必要或者這個能否能否實現啊,如果確定
    發表于 04-30 06:39

    使用emwin解碼bmp圖片,為什么放大顯示不行?

    請教下,使用 emwin 解碼 bmp 圖片圖片 1:1 及縮小顯示都沒有問題,唯獨放大顯示不行 ? 使用emwin 版本如下: emwin v5.40 keil argb -ot
    發表于 04-29 06:00

    使用iconview控件時,能否直接從sd卡中讀取bmp格式的圖片進行顯示啊 ?

    請教下,使用 iconview 控件時,能否直接從sd卡中讀取bmp格式的圖片進行顯示啊 ? 我看很多貌似都是 先把 圖片文件轉換為 .c 或者是 .dat 格式的,有沒有什么方法在
    發表于 04-28 08:11

    HarmonyOS開發案例:【圖片編輯】

    基于ArkTS的聲明式開發范式的樣例,主要介紹了圖片編輯實現過程。
    的頭像 發表于 04-23 20:54 ?402次閱讀
    HarmonyOS<b class='flag-5'>開發</b>案例:【<b class='flag-5'>圖片</b>編輯】

    Linux添加磁盤創建分區、掛載

    Linux添加磁盤創建分區、掛載
    發表于 04-20 17:49 ?526次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>添加</b>磁盤創建分區、掛載

    fpga開發板與linux開發板區別

    (Field-Programmable Gate Array)是一種可編程邏輯器件,它可以通過編程改變硬件邏輯電路的功能和結構。FPGA采用了可編程的門極,可以根據需要重新配置內部電路,從而實現不同的功能和邏輯關系。而
    的頭像 發表于 02-01 17:09 ?2293次閱讀

    instance是何時翻轉的?每次有多少instance在翻轉

    在run dynamic vectorless IR時,instance是何時翻轉的?每次有多少instance在翻轉
    的頭像 發表于 01-26 09:31 ?579次閱讀
    instance是何時<b class='flag-5'>翻轉</b>的?每次有多少instance在<b class='flag-5'>翻轉</b>?
    主站蜘蛛池模板: 欧美性天堂| 丁香综合五月| 色狠狠一区二区| 天堂va| 婷婷月| 色噜噜噜噜噜| 欧美一级欧美三级在线观看| 欧美一级鲁丝片| 久久精品视频5| 成人性色生活影片| 亚洲aa| kkkbo色综合| 在线观看亚洲成人| 婷婷色激情| 欧美日韩国产乱了伦| 黄页在线播放网址| aaaa大片| 欧洲成人r片在线观看| 操操操插插插| 亚洲 午夜在线一区| 最新天堂| 生活片黄色| 久久aa毛片免费播放嗯啊| 91久久另类重口变态| 人日人操| tube69日本老师| 操插干| 在线视频一区二区| 被男同桌摸内裤好爽视频| 五月伊人婷婷| 日本特黄特色免费大片| 狠狠色婷婷丁香综合久久韩国| 77se77亚洲欧美在线大屁股| 欧美女同在线观看| 中文字幕一区二区三区不卡 | 在线视频精品免费| 玖玖福利| 天天躁狠狠躁夜躁2021| 特级免费毛片| 韩国三级视频| 色综合综合色|