抓屏到内存部分代码已经搞定,请写出内存DC中BITMAP压缩部分的代码。今晚通宵在线,一直关注。

解决方案 »

  1.   

    下载 ijl (我已经第 n 此给别人推荐这个东东了)
    http://www.intel.com/software/products/perflib/ijl/里面有压缩 bmp 的例程
      

  2.   

    我有关于lzw的程序,你要吗?
      

  3.   

    这是“屏幕精灵”相关部分的代码,是用CBuilder做的,可参考。
    // 捕获当前屏幕并保存到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;  // 释放资源
    }
    }
      

  4.   

    UP没有分。请大家说说抓屏到内存部分代码已经搞定,请写出内存DC中BITMAP压缩部分的代码。今晚通宵在线,一直关注。
      

  5.   

    http://www.codeguru.com/network/RemoteDesktopViewer.shtml