diff --git a/encoding_copyrect.go b/encoding_copyrect.go index 833cf2f..ffb214c 100644 --- a/encoding_copyrect.go +++ b/encoding_copyrect.go @@ -20,8 +20,13 @@ func (*CopyRectEncoding) Reset() error { } func (*CopyRectEncoding) Type() EncodingType { return EncCopyRect } +func (enc *CopyRectEncoding) SetTargetImage(img draw.Image) { + //logger.Debugf("!!!!!!!!!!!!!setting image: %v", img.Bounds()) + enc.Image = img +} + func (enc *CopyRectEncoding) Read(c Conn, rect *Rectangle) error { - logger.Debugf("Reading: CopyRect%v", rect) + logger.Debugf("Reading: CopyRect %v", rect) if err := binary.Read(c, binary.BigEndian, &enc.SX); err != nil { return err } @@ -30,7 +35,7 @@ func (enc *CopyRectEncoding) Read(c Conn, rect *Rectangle) error { } cpyIm := image.NewRGBA(image.Rectangle{Min: image.Point{0, 0}, Max: image.Point{int(rect.Width), int(rect.Height)}}) for x := 0; x < int(rect.Width); x++ { - for y := 0; x < int(rect.Height); y++ { + for y := 0; y < int(rect.Height); y++ { col := enc.Image.At(x+int(enc.SX), y+int(enc.SY)) cpyIm.Set(x, y, col) } diff --git a/encoding_util.go b/encoding_util.go index 76b9003..ff92a77 100644 --- a/encoding_util.go +++ b/encoding_util.go @@ -7,7 +7,6 @@ import ( "image/color" "image/draw" "io" - "vnc2video/logger" ) func Min(a, b int) int { @@ -25,28 +24,6 @@ func FillRect(img draw.Image, rect *image.Rectangle, c color.Color) { } } -func readRunLength(r io.Reader) (int, error) { - runLen := 1 - - mod, err := ReadUint8(r) - if err != nil { - logger.Errorf("renderZRLE: error while reading mod in plain RLE subencoding: %v", err) - return 0, err - } - runLen += int(mod) - - for mod == 255 { - //mod = fromZlib.read(); - mod, err = ReadUint8(r) - if err != nil { - logger.Errorf("renderZRLE: error while reading mod in-loop plain RLE subencoding: %v", err) - return 0, err - } - runLen += int(mod) - } - return runLen, nil -} - // Read unmarshal color from conn func ReadColor(c io.Reader, pf *PixelFormat) (*color.RGBA, error) { if pf.TrueColor == 0 { diff --git a/encoding_zrle.go b/encoding_zrle.go index ad5c889..f94317e 100644 --- a/encoding_zrle.go +++ b/encoding_zrle.go @@ -298,7 +298,28 @@ func (enc *ZRLEEncoding) handlePlainRLETile(tileOffsetX int, tileOffsetY int, ti return err } -// Read unmarshal color from conn +func readRunLength(r io.Reader) (int, error) { + runLen := 1 + + addition, err := ReadUint8(r) + if err != nil { + logger.Errorf("renderZRLE: error while reading addition to runLen in plain RLE subencoding: %v", err) + return 0, err + } + runLen += int(addition) + + for addition == 255 { + addition, err = ReadUint8(r) + if err != nil { + logger.Errorf("renderZRLE: error while reading addition to runLen in-loop plain RLE subencoding: %v", err) + return 0, err + } + runLen += int(addition) + } + return runLen, nil +} + +// Reads cpixel color from reader func readCPixel(c io.Reader, pf *PixelFormat) (*color.RGBA, error) { if pf.TrueColor == 0 { return nil, errors.New("support for non true color formats was not implemented") @@ -307,7 +328,6 @@ func readCPixel(c io.Reader, pf *PixelFormat) (*color.RGBA, error) { isZRLEFormat := IsCPixelSpecific(pf) var col *color.RGBA if isZRLEFormat { - //tbytes := make([]byte, 3) tbytes, err := ReadBytes(3, c) if err != nil { return nil, err