zoukankan      html  css  js  c++  java
  • 剪切板中的图片处理

     1 //把剪切板中的图片保存到图片
     2     HWND   hWnd=GetSafeHwnd(); 
     3     ::OpenClipboard(hWnd);   //   打开剪贴板 
     4     HANDLE   hBitmap   =   ::GetClipboardData(CF_BITMAP);   //   获取剪贴板数据句柄 
     5     if(hBitmap==NULL) 
     6     { 
     7         return   ; 
     8     } 
     9     HDC   hDC   =   ::GetDC(hWnd);   //   获取设备环境句柄 
    10     HDC   hdcMem   =   CreateCompatibleDC(hDC);   //   创建与设备相关的内存环境 
    11     SelectObject(hdcMem,   hBitmap);   //   选择对象 
    12     SetMapMode(hdcMem,   GetMapMode(hDC));   //   设置映射模式 
    13     BITMAP   bm;   //   得到位图对象 
    14     GetObject(hBitmap,   sizeof(BITMAP),   &bm); 
    15     DeleteFile("c:\\clip.bmp");
    16     SaveBitmap(bm,hDC,(HBITMAP)hBitmap, "c:\\clip.bmp"); 
    17     ::ReleaseDC(hWnd,   hDC);   //   释放设备环境句柄 
    18     DeleteDC(hdcMem);   //   删除内存环境 
    19     ::CloseClipboard();   //   关闭剪贴板
    20 }
     1 //保存到本地函数
     2 BOOL   SaveBitmap(const   BITMAP   &bm,HDC   hDC,HBITMAP   hBitmap,LPCTSTR   szFileName) 
     3 { 
     4 
     5     int   nBitPerPixel   =   bm.bmBitsPixel;//获得颜色模式 
     6     int   nW   =   bm.bmWidth; 
     7     int   nH   =   bm.bmHeight; 
     8     int   nPalItemC=bm.bmPlanes; //调色板项的个数 
     9     int   nBmpInfSize=sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*nPalItemC;//位图信息的大小 
    10     int   nDataSize=(nBitPerPixel*nW+31)/32*4*nH;//位图数据的大小 
    11     //初始化位图信息 
    12     BITMAPFILEHEADER   bfh   =   {0};//位图文件头 
    13     bfh.bfOffBits   =   sizeof(BITMAPFILEHEADER)   +   nBmpInfSize;//sizeof(BITMAPINFOHEADER);//到位图数据的偏移量 
    14     bfh.bfSize   =   bfh.bfOffBits   +   nDataSize;//文件总的大小 
    15     bfh.bfType   =   (WORD)0x4d42;//位图标志 
    16     char   *   p   =   new   char[nBmpInfSize+nDataSize];//申请内存位图数据空间(包括信息头) 
    17     memset(p,0,nBmpInfSize);//将信息头的数据初始化为0 
    18     LPBITMAPINFOHEADER   pBih   =   (LPBITMAPINFOHEADER)   p;//位图信息头 
    19     pBih-> biCompression   =   BI_RGB; 
    20     pBih-> biBitCount   =   nBitPerPixel;//每个图元像素使用的位数 
    21     pBih-> biHeight   =   nH;//高度 
    22     pBih-> biWidth   =   nW;//宽度 
    23     pBih-> biPlanes   =   1; 
    24     pBih-> biSize   =   sizeof(BITMAPINFOHEADER); 
    25     pBih-> biSizeImage   =   nDataSize;//图像数据大小 
    26     char   *pData=p+nBmpInfSize; 
    27     //DDB转换为DIB 
    28     ::GetDIBits(hDC,hBitmap,0,nH,pData,(LPBITMAPINFO)   pBih,   DIB_RGB_COLORS);//获取位图数据 
    29     ofstream   ofs(szFileName,ios::binary); 
    30     if(ofs.fail()) 
    31         return   FALSE; 
    32     ofs.write((const   char*)&bfh,   sizeof(BITMAPFILEHEADER));//写入位图文件头 
    33     ofs.write((const   char*)pBih,   nBmpInfSize);//写入位图信息数据 
    34     ofs.write((const   char*)pData,   nDataSize);//写入位图数据 
    35     return   TRUE; 
    36 } 
     1 //加载本地图片 并绘制    
     2 
     3 HBITMAP hBitmap = (HBITMAP) ::LoadImage(NULL, "c:\\clip.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
     4     HDC   hDC   =   ::GetDC(GetSafeHwnd());   //   获取设备环境句柄 
     5     HDC   hdcMem   =   CreateCompatibleDC(hDC);   //   创建与设备相关的内存环境 
     6     SelectObject(hdcMem,   hBitmap);   //   选择对象 
     7     BITMAP   bm;   //   得到位图对象 
     8     GetObject(hBitmap,   sizeof(BITMAP),   &bm); 
     9 
    10     BitBlt(hDC,   0,   0,   bm.bmWidth,   bm.bmHeight,   hdcMem,   0,   0,   SRCCOPY);   //位图复制 
    11     ::ReleaseDC(GetSafeHwnd(),   hDC);   //   释放设备环境句柄 
    12     DeleteDC(hdcMem);   //   删除内存环境 
    13     ::CloseClipboard();   //   关闭剪贴板
  • 相关阅读:
    Yii增删改查
    10个超级有用、必须收藏的PHP代码样例
    yii源码分析I、II
    Yii源码阅读笔记
    Yii源码阅读笔记
    Yii源码阅读笔记
    当浏览器输入url的时候发生了什么
    js模块化值之seaJS
    js判断字符串中的英文和汉字
    display:table-cell的惊天作用,直接惊呆你!
  • 原文地址:https://www.cnblogs.com/FCoding/p/2698836.html
Copyright © 2011-2022 走看看