public EncodedRectangle(RfbProtocol rfb, Framebuffer framebuffer, Rectangle rectangle, int encoding) { this.rfb = rfb; this.framebuffer = framebuffer; this.rectangle = rectangle; //Select appropriate reader BinaryReader reader = (encoding == RfbProtocol.ZRLE_ENCODING) ? rfb.ZrleReader : rfb.Reader; // Create the appropriate PixelReader depending on screen size and encoding switch (framebuffer.BitsPerPixel) { case 32: if (encoding == RfbProtocol.ZRLE_ENCODING) { 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."); } }