⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zrle.cxx

📁 realvnc是一个非常流行的远程控制程序
💻 CXX
字号:
//// Copyright (C) 2002-2003 RealVNC Ltd.  All Rights Reserved.//#include <rdr/ZlibInStream.h>#include <rdr/FdInStream.h>#include <rdr/Exception.h>#include "stdhdrs.h"#include "vncviewer.h"#include "ClientConnection.h"// Instantiate the decoding function for 8, 16 and 32 BPP#define FAVOUR_FILL_RECT#define zrleDecode ClientConnection::zrleDecode#define BPP 8#define IMAGE_RECT(x,y,w,h,data)                \    SETUP_COLOR_SHORTCUTS;                      \    SETPIXELS(8,x,y,w,h)#define FILL_RECT(x,y,w,h,pix)                          \    SETUP_COLOR_SHORTCUTS;                              \    COLORREF color = COLOR_FROM_PIXEL8_ADDRESS(&pix);   \    FillSolidRect(x,y,w,h,color)#include <rfb/zrleDecode.h>#undef BPP#undef IMAGE_RECT#undef FILL_RECT#define BPP 16#define IMAGE_RECT(x,y,w,h,data)                \    SETUP_COLOR_SHORTCUTS;                      \    SETPIXELS(16,x,y,w,h)#define FILL_RECT(x,y,w,h,pix)                          \    SETUP_COLOR_SHORTCUTS;                              \    COLORREF color = COLOR_FROM_PIXEL16_ADDRESS(&pix);  \    FillSolidRect(x,y,w,h,color)#include <rfb/zrleDecode.h>#undef BPP#undef IMAGE_RECT#undef FILL_RECT#define IMAGE_RECT(x,y,w,h,data)                \    SETUP_COLOR_SHORTCUTS;                      \    SETPIXELS(32,x,y,w,h)#define FILL_RECT(x,y,w,h,pix)                          \    SETUP_COLOR_SHORTCUTS;                              \    COLORREF color = COLOR_FROM_PIXEL32_ADDRESS(&pix);  \    FillSolidRect(x,y,w,h,color)#define BPP 32#include <rfb/zrleDecode.h>#define CPIXEL 24A#include <rfb/zrleDecode.h>#undef CPIXEL#define CPIXEL 24B#include <rfb/zrleDecode.h>#undef CPIXEL#undef BPP#undef IMAGE_RECT#undef FILL_RECT#undef zrleDecodevoid ClientConnection::zrleDecode(int x, int y, int w, int h){  try {    CheckBufferSize(rfbZRLETileWidth * rfbZRLETileHeight * 4);    omni_mutex_lock l(m_bitmapdcMutex);    ObjectSelector b(m_hBitmapDC, m_hBitmap);    PaletteSelector p(m_hBitmapDC, m_hPalette);    switch (m_myFormat.bitsPerPixel) {    case 8:      zrleDecode8(x,y,w,h,fis,zis,(rdr::U8*)m_netbuf);      break;    case 16:      zrleDecode16(x,y,w,h,fis,zis,(rdr::U16*)m_netbuf);      break;    case 32:      bool fitsInLS3Bytes        = ((m_myFormat.redMax   << m_myFormat.redShift)   < (1<<24) &&           (m_myFormat.greenMax << m_myFormat.greenShift) < (1<<24) &&           (m_myFormat.blueMax  << m_myFormat.blueShift)  < (1<<24));      bool fitsInMS3Bytes = (m_myFormat.redShift   > 7  &&                             m_myFormat.greenShift > 7  &&                             m_myFormat.blueShift  > 7);      if ((fitsInLS3Bytes && !m_myFormat.bigEndian) ||          (fitsInMS3Bytes && m_myFormat.bigEndian))      {        zrleDecode24A(x,y,w,h,fis,zis,(rdr::U32*)m_netbuf);      }      else if ((fitsInLS3Bytes && m_myFormat.bigEndian) ||               (fitsInMS3Bytes && !m_myFormat.bigEndian))      {        zrleDecode24B(x,y,w,h,fis,zis,(rdr::U32*)m_netbuf);      }      else      {        zrleDecode32(x,y,w,h,fis,zis,(rdr::U32*)m_netbuf);      }      break;    }  } catch (rdr::Exception& e) {    fprintf(stderr,"ZRLE decoder exception: %s\n",e.str());    throw;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -