private BaseDecoder GetDecoder(RfbEncodingType enc) { switch (enc) { case RfbEncodingType.Raw: return(RawDecoder); case RfbEncodingType.CopyRect: return(CopyRectDecoder); case RfbEncodingType.Zlib: return(ZlibDecoder); case RfbEncodingType.ZRLE: return(ZrleDecoder); default: throw new NotImplementedException(); } }
public EncodedRectangle(RfbProtocol rfb, Framebuffer framebuffer, Rectangle rectangle, RfbEncodingType encoding) { this.rfb = rfb ?? throw new ArgumentNullException(nameof(rfb)); Framebuffer = framebuffer ?? throw new ArgumentNullException(nameof(framebuffer)); this.rectangle = rectangle; EncodingType = encoding; //Select appropriate reader var reader = encoding == RfbEncodingType.ZRLE ? rfb.ZrleReader : rfb.Reader; // Create the appropriate PixelReader depending on screen size and encoding switch (framebuffer.BitsPerPixel) { case 32: if (encoding == RfbEncodingType.ZRLE) { preader = new CPixelReader(reader, framebuffer); } else { preader = new PixelReader32(reader, framebuffer); } break; case 16: preader = new PixelReader16(reader, framebuffer); break; case 8: preader = new PixelReader8(reader, framebuffer, rfb); break; default: throw new ArgumentOutOfRangeException("BitsPerPixel", framebuffer.BitsPerPixel, "Valid VNC Pixel Widths are 8, 16 or 32 bits."); } }
/// <summary> /// Creates an object type derived from EncodedRectangle, based on the value of encoding. /// </summary> /// <param name="r">A Rectangle object defining the bounds of the rectangle to be created</param> /// <param name="encoding">An Integer indicating the encoding type to be used for this rectangle. Used to determine the type of EncodedRectangle to create.</param> /// <returns></returns> public static EncodedRectangle Build(RfbProtocol rfb, Framebuffer framebuffer, Rectangle r, RfbEncodingType encoding) { switch (encoding) { case RfbEncodingType.Raw: return(new RawRectangle(rfb, framebuffer, r)); case RfbEncodingType.CopyRect: return(new CopyRectRectangle(rfb, framebuffer, r)); case RfbEncodingType.RRE: return(new RreRectangle(rfb, framebuffer, r)); case RfbEncodingType.CoRRE: return(new CoRreRectangle(rfb, framebuffer, r)); case RfbEncodingType.Hextile: return(new HextileRectangle(rfb, framebuffer, r)); case RfbEncodingType.ZRLE: return(new ZrleRectangle(rfb, framebuffer, r)); default: throw new InvalidOperationException($"Unsupported encoding: {encoding}."); } }
public RfbRectangle(Rectangle r, RfbEncodingType e) { Rectangle = r; EncodingType = e; }