抓屏到内存部分代码已经搞定,请写出内存DC中BITMAP压缩部分的代码。今晚通宵在线,一直关注。
解决方案 »
- a=b
- 大哥们,推荐几本关于图形处理(尤其是图形分割)方面的书,不过基础点的,以前没接触过这方面的
- 有没有人知道Microsoft Office Chart 10.0在VC里怎么调用?
- 谁能将其做成activeX?高分相送。
- 抽奖程序源代码
- 请各位指点
- 如何试编辑框不影响背景颜色呢!高分送!
- 调查:IT业内人士的薪水!供大家参考!(1.职位2.工作几年3.开发工具4.主要项目5.薪水)!
- 高手都去哪儿了?关于CDialogBar的问题
- CXTPToolbar替换控件之后不响应。
- 我要做一个抓屏程序,现可以截取整个屏幕,但要把鼠标也截取下来,怎么办?
- 请教:直接抓屏,压成jpeg格式,局域网传送,如何解决?
http://www.intel.com/software/products/perflib/ijl/里面有压缩 bmp 的例程
// 捕获当前屏幕并保存到imagestream中
void CaptureImage(int options, int level, int cq, TMemoryStream* imgstream)
{
LONG width,height;
RECT capRect;
HDC DesktopDC;
switch (options) {
case CM_ENTIRESCREEN: // 捕获整个屏幕
// 取得桌面的矩形区域范围
GetWindowRect(GetDesktopWindow(),&capRect);
break;
case CM_ACTIVEWINDOW: // 捕获当前窗口
HWND ForegWin;
ForegWin = GetForegroundWindow(); // 取得当前窗口句柄
if (!ForegWin)
ForegWin = GetDesktopWindow();
GetWindowRect(ForegWin,&capRect); // 取得当前窗口的矩形区域范围
break;
} DesktopDC = GetDC(GetDesktopWindow()); // 创建内存设备描述表
width = capRect.right - capRect.left;
height = capRect.bottom - capRect.top;
Graphics::TBitmap *bBitmap; // 定义位图变量
try {
bBitmap = new Graphics::TBitmap(); // 创建位图
bBitmap->Width=width;
bBitmap->Height=height;
if ((level>0)&&(level<8))
bBitmap->PixelFormat = TPixelFormat(level); // 设定色深
// 拷贝屏幕的指定区域到位图
BitBlt(bBitmap->Canvas->Handle,0,0,width,height,DesktopDC,
capRect.left,capRect.top,SRCCOPY); if (cq>=0) {
TJPEGImage *jpeg;
try {
jpeg = new TJPEGImage; // 创建JPEG图象
jpeg->CompressionQuality = cq; // 设定图象品质
jpeg->Assign(bBitmap); // 将位图转化为JPEG格式
jpeg->SaveToStream(imgstream); // 保存JPEG图象信息
}
__finally {
delete jpeg; // 释放资源
}
}
else {
bBitmap->SaveToStream(imgstream); // 保存位图信息
}
}
__finally {
delete bBitmap; // 释放资源
}
}