📄 zrle.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 + -