GDI+屏幕截图内存BMP转JPG,JPG再转IStream流,IStream流再转BYTE;

  终于有点突破了,研究了一在的远程监控,用GDI+屏幕截图内存BMP转JPG,JPG再转IStream流,IStream流再转BYTE;

CImage   mmage;   
HWND   hWnd   =   ::GetDesktopWindow();//获得屏幕的HWND.   
HDC   hScreenDC   =   ::GetDC(hWnd);       //获得屏幕的HDC.   
HDC   MemDC   =   ::CreateCompatibleDC(hScreenDC);   
RECT   rect;     
::GetWindowRect(hWnd,&rect);   


HBITMAP   hBitmap   =   ::CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom);   
HGDIOBJ   hOldBMP   =   ::SelectObject(MemDC,hBitmap);   
::BitBlt(MemDC,0,0,rect.right,rect.bottom,hScreenDC,rect.left,rect.top,SRCCOPY);   
hBitmap=(HBITMAP)::SelectObject(MemDC,hOldBMP);   


mmage.Attach(hBitmap);   
IStream*   pStmImage   =   NULL;   


HGLOBAL   hMemBmp   =   GlobalAlloc(GMEM_MOVEABLE,0);//可移动的缓冲区   
if   (hMemBmp   ==   NULL)   return ;   
CreateStreamOnHGlobal(hMemBmp,   FALSE,   &pStmImage);//将内存区B作为流的起始   
if   (pStmImage   ==   NULL)   
{   
GlobalFree(hMemBmp);   
AfxMessageBox("为空");   
return   ;   
}   

     //屏幕BMP保存成JPEG IStream流
mmage.Save(pStmImage,Gdiplus::ImageFormatJPEG); //保存成JPEG IStream流
CDC *pDC =this->GetActiveView()->GetDC();//可换成你的DC,这里代码是放在主框架CMainFrame中的,所以才这样写
HDC hDC =pDC ->GetSafeHdc(); // 获取 HDC(设备句柄) 来进行绘图操作
CRect rc;
GetClientRect(&rc);
//mmage.Draw(hDC,rc);///屏幕截图在单文档的界面中显示,这里可以用来验证
//mmage.Save("jjj.jpg");///将图片保存出去,这里可以用来验证



IStream流转成BYTE
//得到缓冲区的起始地址
BYTE*   pbyBmp=(BYTE*)GlobalLock(hMemBmp); 
//锁住内存
GlobalUnlock(hMemBmp);
//得到格式转换后图片的大小
m_BufferSize=GlobalSize(hMemBmp);   
//把内存中的JPG格式图片数据拷贝到频道1发送缓冲区中
memcpy((void*)m_Buffer,(void*)pbyBmp,m_BufferSize);


其中。。 BYTE m_Buffer[65536];  //定义在头文件CMainFrame中
               SIZE_T m_BufferSize;//定义在头文件中



至此,就把屏幕内存BMP转BYTE了。这里可以用来远程监控或远程控制传输桌面了!!!



下面的文章接着讲怎么将BYTE转成Stream流并显示出来




  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值