Esempio n. 1
0
        private static void ropNor(RdpCanvas biDst, int dstwidth, int x, int y, int cx, int cy, uint[] src, int srcwidth, int srcx, int srcy, int Bpp)
        {
            int num   = Options.bpp_mask;
            int index = (srcy * srcwidth) + srcx;

            for (int i = 0; i < cy; i++)
            {
                for (int j = 0; j < cx; j++)
                {
                    biDst.SetPixel(x + cx, y + cy, ((int)~(biDst.GetPixel(x + cx, y + cy) | src[index])) & num);
                }
                index += srcwidth - cx;
            }
        }
Esempio n. 2
0
        private static void ropXor(RdpCanvas biDst, int dstwidth, int x, int y, int cx, int cy, uint[] src, int srcwidth, int srcx, int srcy, int Bpp)
        {
            int num   = Options.bpp_mask;
            int index = (srcy * srcwidth) + srcx;

            for (int i = 0; i < cy; i++)
            {
                for (int j = 0; j < cx; j++)
                {
                    int pixel = biDst.GetPixel(x + j, y + i);
                    biDst.SetPixel(x + j, y + i, pixel ^ (((int)src[index]) & num));
                    index++;
                }
                index += srcwidth - cx;
            }
        }
Esempio n. 3
0
        private static void ropInvert(RdpCanvas biDst, uint[] dest, int width, int x, int y, int cx, int cy, int Bpp)
        {
            int num   = Options.bpp_mask;
            int index = (y * width) + x;

            for (int i = 0; i < cy; i++)
            {
                for (int j = 0; j < cx; j++)
                {
                    if (biDst != null)
                    {
                        int pixel = biDst.GetPixel(x + j, y + i);
                        biDst.SetPixel(x + j, y + i, ~pixel & num);
                    }
                    else
                    {
                        dest[index] = ~dest[index] & ((uint)num);
                    }
                    index++;
                }
                index += width - cx;
            }
        }
Esempio n. 4
0
        public static void do_pixel(int opcode, RdpCanvas dst, int x, int y, int color)
        {
            int num = Options.bpp_mask;

            if (dst != null)
            {
                int pixel = dst.GetPixel(x, y);
                switch (opcode)
                {
                case 0:
                    dst.SetPixel(x, y, 0);
                    return;

                case 1:
                    dst.SetPixel(x, y, ~(pixel | color) & num);
                    return;

                case 2:
                    dst.SetPixel(x, y, pixel & (~color & num));
                    return;

                case 3:
                    dst.SetPixel(x, y, ~color & num);
                    return;

                case 4:
                    dst.SetPixel(x, y, (~pixel & color) * num);
                    return;

                case 5:
                    dst.SetPixel(x, y, ~pixel & num);
                    return;

                case 6:
                    dst.SetPixel(x, y, pixel ^ (color & num));
                    return;

                case 7:
                    dst.SetPixel(x, y, (~pixel & color) & num);
                    return;

                case 8:
                    dst.SetPixel(x, y, pixel & (color & num));
                    return;

                case 9:
                    dst.SetPixel(x, y, pixel ^ (~color & num));
                    return;

                case 10:
                    break;

                case 11:
                    dst.SetPixel(x, y, pixel | (~color & num));
                    return;

                case 12:
                    dst.SetPixel(x, y, color);
                    return;

                case 13:
                    dst.SetPixel(x, y, (~pixel | color) & num);
                    return;

                case 14:
                    dst.SetPixel(x, y, pixel | (color & num));
                    return;

                case 15:
                    dst.SetPixel(x, y, num);
                    return;

                default:
                    // do_byte unsupported opcode:  opcode
                    break;
                }
            }
        }