利用VC开发屏幕抓图程序实列

上传人:仙*** 文档编号:69462008 上传时间:2022-04-05 格式:DOC 页数:18 大小:190KB
收藏 版权申诉 举报 下载
利用VC开发屏幕抓图程序实列_第1页
第1页 / 共18页
利用VC开发屏幕抓图程序实列_第2页
第2页 / 共18页
利用VC开发屏幕抓图程序实列_第3页
第3页 / 共18页
资源描述:

《利用VC开发屏幕抓图程序实列》由会员分享,可在线阅读,更多相关《利用VC开发屏幕抓图程序实列(18页珍藏版)》请在装配图网上搜索。

1、利用VC+开发屏幕抓图程序实列作者:未知 文章来源:网络在Windows操作系统中,当用户按下PrintScreen按钮后,Windows自动将当前屏幕的图像 拷贝到系统剪贴板中,这时可以通过”画笔这个小程序将剪贴板中的内容保存成图像文件,可以看出,如果需要将当前屏幕保存下来还是比较麻烦的,能否可以自己编写一个应用程序,自动将当前屏幕的内容保存到一个图像文件中去呢?这个答案是肯定的,本实例应用程序就是利用通用的热键管理 DLL库实现的热键功能,在收到热键通知后截取屏幕的内容并保存 到bmp文件中。例如我们设置图片保存路径为c:,热键为F9 + Control,然后按Change按钮设置好热键,

2、那么当我们按下CTRL+F9后,当前界面将以 BMP图像文件的格式被保存在C:目录下。、实现方法热键管理DLL实际上是一个键盘钩子,由它来监视系统的键盘事件。如果有和程序登记符合的按键组合就通知该程序的窗口。为了应用方便,本实例把它做成了一个标准的管理库来为其它的程序通过热键服务,它有两个输出函数:AddHotkey ()和DeleteHotkey(),程序只需要调用这两个函数就可以了,如果编译之后不用改变热键,则只需要AddHotkey就可以了。DLL中的所有的全局变量都放在一个共享段中,定义如下:#pragma data_seg(shareddata)HHOOK hHook =NULL;

3、/ 钩子句柄UINT nHookCount =0; /挂接的程序数目static UCHAR HotKeyMAX_KEY = 0; / 热键虚拟键码static UCHAR HotKeyMaskMAX_KEY = 0; /组合掩码,control=4,alt=2,shift=1static HWND hCallWndMAX_KEY = 0; /win dow han dle associated with hotkeystatic int KeyCo unt =0;static UCHAR MaskBits =0; /00000 Ctrl=4 & Alt=2 & Shift=1#pragma

4、data_seg()关于共享段,有几点重要的说明:一是必须在链接选项里指定该段为共享:一种方法是在 project-settings-link-object/library 中加上 /section:shareddata,rws ;第二种方法是在 def 文件的sections里加上一句 shareddata read write shared;第三种指定共享段的方法在程序里 加上一句 #pragma comment(linker,section:shareddata,rws)。二是所有的变量必须初始化,否 则链接程序会把它放到普通数据段。三是如果不初始化变量,需要在段外用_declspec(

5、allocate(shareddata)变量类型变量名”的方式定义。DLL中的两个输出函数分别用来添加/删除热键,函数代码如下:BOOL _declspec(dllexport) _stdcall AddHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)BOOL bAdded=FALSE; for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=0) hCallWndindex=hWnd; HotKeyindex=cKey; HotKeyMaskindex=cMask; bAdded=TRUE; KeyCount

6、+; break;return bAdded;/删除热键BOOL _declspec(dllexport) _stdcall DeleteHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)BOOL bRemoved=FALSE;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=hWnd) if(HotKeyindex=cKey&HotKeyMaskindex=cMask) hCallWndindex=NULL; HotKeyindex=0;HotKeyMaskindex=0; bRemoved=TRUE;K

7、eyCount-;break;return bRemoved;DLL 中的钩子函数如下:LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) BOOL bProcessed=FALSE; if(HC_ACTION=nCode) if(lParam&0xc0000000)=0xc0000000)/ 有键松开 switch(wParam)case VK_MENU:MaskBits&=ALTBIT;break;case VK_CONTROL:MaskBits&=CTRLBIT;break;case VK_SHIFT:

8、MaskBits&=SHIFTBIT;break;default: /judge the key and send messagebreak;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL) continue;if(IsWindow(hCallWndindex)&(HotKeyindex=wParam)&(HotKeyMaskindex=Mask Bits) SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYUP); bProcessed=TRUE;else if(lParam

9、&0xc000ffff)=1) / 有键按下 switch(wParam)case VK_MENU:MaskBits|=ALTBIT;break;case VK_CONTROL:MaskBits|=CTRLBIT;break;case VK_SHIFT:MaskBits|=SHIFTBIT;break;default: /judge the key and send messagebreak;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL) continue;if(IsWindow(hCallWndindex)&(HotKe

10、yindex=wParam)&(HotKeyMaskindex=Mask Bits)SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYDOWN); bProcessed=TRUE;if(!bProcessed) / 一般按键事件,为监视键盘的程序留出余地 for(int index=0;index 1000#pragma once#endif / _MSC_VER 1000#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#inclu

11、de resource.h / main symbolsclass CHookApp : public CWinApppublic:CHookApp();/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CHookApp)public:virtual BOOL InitInstance();virtual int ExitInstance();/AFX_VIRTUAL /AFX_MSG(CHookApp)/ NOTE - the ClassWizard will add and remove me

12、mber functions here./ DO NOT EDIT what you see in these blocks of generated code !/AFX_MSGDECLARE_MESSAGE_MAP();LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);BOOL _declspec(dllexport)_stdcall AddHotkey(HWND,UCHAR key,UCHAR mask);BOOL _declspec(dllexport)_stdcall DeleteHotkey(

13、HWND,UCHAR key,UCHAR mask); BOOL InitHotkey();BOOL UnInit();#endif/ Hook.cpp : Defines the initialization routines for the DLL.#include stdafx.h#include hook.h#include #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILE static char THIS_FILE = _FILE_;#endif#define MAX_KEY 100#define CTRLBIT 0x04#defi

14、ne ALTBIT 0x02#define SHIFTBIT 0x01#pragma data_seg(shareddata) HHOOK hHook =NULL;UINT nHookCount =0;static UCHAR HotKeyMAX_KEY = 0; /hotkeystatic UCHAR HotKeyMaskMAX_KEY = 0; /flag for hotkey, value is VK_CONTRL or VK_NEMU or VK_SHIFTstatic HWND hCallWndMAX_KEY = 0; /window associated with hotkeyst

15、atic int KeyCount =0;static UCHAR MaskBits =0; /00000 Ctrl Alt Shift#pragma data_seg()HINSTANCE hins;void VerifyWindow();BEGIN_MESSAGE_MAP(CHookApp, CWinApp) /AFX_MSG_MAP(CHookApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated

16、 code! /AFX_MSG_MAPEND_MESSAGE_MAP()CHookApp:CHookApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstanceCHookApp theApp;LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) BOOL bProcessed=FALSE; if(HC_ACTION=nCode) if(lParam&0xc0000000)=0xc000

17、0000)/ Key up switch(wParam)case VK_MENU:MaskBits&=ALTBIT;break;case VK_CONTROL:MaskBits&=CTRLBIT;break;case VK_SHIFT:MaskBits&=SHIFTBIT;break;default: /judge the key and send messagebreak;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL)continue;if(IsWindow(hCallWndindex)&(HotKeyindex=wPa

18、ram)&(HotKeyMaskindex=Mask Bits) SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYUP); bProcessed=TRUE;else if(lParam&0xc000ffff)=1) /Key down switch(wParam)case VK_MENU: MaskBits|=ALTBIT;break;case VK_CONTROL:MaskBits|=CTRLBIT;break;case VK_SHIFT:MaskBits|=SHIFTBIT;break;default: /judge the key and

19、 send message break;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=NULL) continue;if(IsWindow(hCallWndindex)&(HotKeyindex=wParam)&(HotKeyMaskindex=Mask Bits) SendMessage(hCallWndindex,WM_HOTKEY,wParam,WM_KEYDOWN); bProcessed=TRUE; if(!bProcessed) for(int index=0;index1)nHookCount-;return TRUE

20、;BOOL unhooked = UnhookWindowsHookEx(hHook); if(unhooked=TRUE)nHookCount=0;hHook=NULL;return unhooked;BOOL _declspec(dllexport) _stdcall AddHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask) BOOL bAdded=FALSE;for(int index=0;indexMAX_KEY;index+)if(hCallWndindex=0) hCallWndindex=hWnd; HotKeyindex=cKey;HotKeyMa

21、skindex=cMask;bAdded=TRUE;KeyCount+;break;return bAdded;BOOL _declspec(dllexport) _stdcall DeleteHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)BOOL bRemoved=FALSE;for(int index=0;indexMAX_KEY;index+) if(hCallWndindex=hWnd) if(HotKeyindex=cKey&HotKeyMaskindex=cMask) hCallWndindex=NULL;HotKeyindex=0;HotKeyM

22、askindex=0; bRemoved=TRUE;KeyCount-;break;return bRemoved;void VerifyWindow()for(int i=0;i 1000#pragma once#endif / _MSC_VER 1000class CCaptureDlg : public CDialog/ Constructionpublic:BOOL bTray;BOOL bRegistered;BOOL RegisterHotkey();UCHAR cKey;UCHAR cMask;void DeleteIcon();void AddIcon();UINT nCoun

23、t;void SaveBmp();CCaptureDlg(CWnd* pParent = NULL); / standard constructor/ Dialog Data/AFX_DATA(CCaptureDlg)enum IDD = IDD_CAPTURE_DIALOG ;CComboBox m_Key;BOOL m_bControl;BOOL m_bAlt;BOOL m_bShift;CString m_Path;CString m_Number;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUA

24、L(CCaptureDlg)public:virtual BOOL PreTranslateMessage(MSG* pMsg); protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV supportvirtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); /AFX_VIRTUAL/ Implementation protected:HICON m_hIcon;/ Generated message map functions

25、/AFX_MSG(CCaptureDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();virtual void OnCancel();afx_msg void OnAbout();afx_msg void OnBrowse();afx_msg void OnChange();/AFX_MSGDECLARE_MESSAGE_MAP() ;#endif / CaptureD

26、lg.cpp : implementation file#include stdafx.h#include Capture.h#include CaptureDlg.h#include #pragma comment(lib,hook.lib)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILE static char THIS_FILE = _FILE_;#endif#define IDM_SHELL WM_USER+1BOOL _declspec(dllexport)_stdcall AddHotkey(HWND,UCHAR key,UCHA

27、R mask);BOOL _declspec(dllexport)_stdcall DeleteHotkey(HWND,UCHAR key,UCHAR mask); UCHARKey_Table=0x78,0x79,0x7a,0x7b,0x6a,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39 ;class CAboutDlg : public CDialogpublic: CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ Class

28、Wizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg

29、)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg) /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()CCaptureDlg:CCaptureDlg(CWnd* pParent /*=NULL*/): CDialog(CC

30、aptureDlg:IDD, pParent)/AFX_DATA_INIT(CCaptureDlg)m_bControl = FALSE;m_bAlt = FALSE;m_bShift = FALSE;m_Path = _T(c:);m_Number = _T(0 picture captured.);nCount=0;bRegistered=FALSE;bTray=FALSE;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-L

31、oadIcon(IDR_MAINFRAME);void CCaptureDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCaptureDlg)DDX_Control(pDX, IDC_KEY, m_Key);DDX_Check(pDX, IDC_CONTROL, m_bControl);DDX_Check(pDX, IDC_ALT, m_bAlt);DDX_Check(pDX, IDC_SHIFT, m_bShift);DDX_Text(pDX, IDC_PATH, m_Path)

32、;DDX_Text(pDX, IDC_NUMBER, m_Number);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCaptureDlg, CDialog)/AFX_MSG_MAP(CCaptureDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(ID_ABOUT, OnAbout) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(ID_CHANGE, OnChange) /AFX_MSG_MAPEND_MESSAGE_MAP()B

33、OOL CCaptureDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small iconm_Key.SetCurSel(0

34、);RegisterHotkey();CMenu* pMenu=GetSystemMenu(FALSE); pMenu-DeleteMenu(SC_MAXIMIZE,MF_BYCOMMAND); pMenu-DeleteMenu(SC_SIZE,MF_BYCOMMAND); pMenu-DeleteMenu(SC_RESTORE,MF_BYCOMMAND); return TRUE; / return TRUE unless you set the focus to a controlvoid CCaptureDlg:OnSysCommand(UINT nID, LPARAM lParam)

35、if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CCaptureDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangleint cxIco

36、n = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CCaptureDlg:OnQueryDragIcon()return (HCURS

37、OR) m_hIcon;void CCaptureDlg:OnCancel()if(bTray)DeleteIcon(); CDialog:OnCancel();void CCaptureDlg:OnAbout()CAboutDlg dlg;dlg.DoModal();void CCaptureDlg:OnBrowse()CString str;BROWSEINFO bi;char nameMAX_PATH;ZeroMemory(&bi,sizeof(BROWSEINFO); bi.hwndOwner=GetSafeHwnd();bi.pszDisplayName=name;bi.lpszTi

38、tle=Select folder; bi.ulFlags=BIF_RETURNONLYFSDIRS;LPITEMIDLIST idl=SHBrowseForFolder(&bi); if(idl=NULL)return;SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH); str.ReleaseBuffer();m_Path=str;if(str.GetAt(str.GetLength()-1)!=)m_Path+=;UpdateData(FALSE);void CCaptureDlg:SaveBmp()CDC dc; dc.CreateDC(DI

39、SPLAY,NULL,NULL,NULL);CBitmap bm;int Width=GetSystemMetrics(SM_CXSCREEN);int Height=GetSystemMetrics(SM_CYSCREEN); bm.CreateCompatibleBitmap(&dc,Width,Height); CDC tdc;tdc.CreateCompatibleDC(&dc);CBitmap*pOld=tdc.SelectObject(&bm); tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY); tdc.SelectObject(pOld)

40、;BITMAP btm;bm.GetBitmap(&btm);DWORD size=btm.bmWidthBytes*btm.bmHeight;LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size); BITMAPINFOHEADER bih;bih.biBitCount=btm.bmBitsPixel;bih.biClrImportant=0;bih.biClrUsed=0;bih.biCompression=0;bih.biHeight=btm.bmHeight;bih.biPlanes=1;bih.biSize=sizeof(BITMAPINFOHEA

41、DER);bih.biSizeImage=size;bih.biWidth=btm.bmWidth;bih.biXPelsPerMeter=0;bih.biYPelsPerMeter=0;GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); static int filecount=0;CString name;name.Format(pict%04d.bmp,filecount+);name=m_Path+name;BITMAPFILEHEADER bfh; bfh.bfReserved1=bfh.b

42、fReserved2=0;bfh.bfType=(WORD)(M message = WM_KEYDOWN)if(pMsg - wParam = VK_ESCAPE)return TRUE;if(pMsg - wParam = VK_RETURN)return TRUE;return CDialog:PreTranslateMessage(pMsg);LRESULT CCaptureDlg:WindowProc(UINT message, WPARAM wParam, LPARAM lParam) if(message=WM_HOTKEY&lParam=WM_KEYDOWN)SaveBmp()

43、;return FALSE; if(message=IDM_SHELL&lParam=WM_RBUTTONUP)CMenu pop;pop.LoadMenu(MAKEINTRESOURCE(IDR_MENU1);CMenu*pMenu=pop.GetSubMenu(0);pMenu-SetDefaultItem(ID_EXITICON);CPoint pt;GetCursorPos(&pt);intid=pMenu-TrackPopupMenu(TPM_RIGHTALIGN|TPM_NONOTIFY|TPM_RETURNCMD|T PM_LEFTBUTTON,pt.x,pt.y,this);i

44、f(id=ID_EXITICON)DeleteIcon();else if(id=ID_EXIT)OnCancel();return FALSE;LRESULT res= CDialog:WindowProc(message, wParam, lParam); if(message=WM_SYSCOMMAND&wParam=SC_MINIMIZE) AddIcon();return res;void CCaptureDlg:AddIcon()NOTIFYICONDATA data;data.cbSize=sizeof(NOTIFYICONDATA);CString tip;tip.LoadSt

45、ring(IDS_ICONTIP);data.hIcon=GetIcon(0);data.hWnd=GetSafeHwnd();strcpy(data.szTip,tip);data.uCallbackMessage=IDM_SHELL;data.uFlags=NIF_ICON|NIF_MESSAGE |NIF_TIP ;data.uID=98;Shell_NotifyIcon(NIM_ADD,&data);ShowWindow(SW_HIDE); bTray=TRUE;void CCaptureDlg:DeleteIcon()NOTIFYICONDATA data; data.cbSize=

46、sizeof(NOTIFYICONDATA); data.hWnd=GetSafeHwnd();data.uID=98; Shell_NotifyIcon(NIM_DELETE,&data); ShowWindow(SW_SHOW); SetForegroundWindow(); ShowWindow(SW_SHOWNORMAL); bTray=FALSE;void CCaptureDlg:OnChange()RegisterHotkey();BOOL CCaptureDlg:RegisterHotkey()UpdateData();UCHAR mask=0;UCHAR key=0; if(m

47、_bControl)mask|=4;if(m_bAlt)mask|=2;if(m_bShift)mask|=1; key=Key_Tablem_Key.GetCurSel(); if(bRegistered)DeleteHotkey(GetSafeHwnd(),cKey,cMask); bRegistered=FALSE;cMask=mask; cKey=key; bRegistered=AddHotkey(GetSafeHwnd(),cKey,cMask); return bRegistered;四、小结本实例通过一个钩子 DLL 实现了屏幕抓图的功能,它有一个缺陷,那就是只能保存整 个屏幕图像, 不过读者朋友可以在此基础上, 实现屏幕任意区域的抓图功能, 具体方法不再 赘述,实现起来很容易的了,呵呵。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!