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; } }
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; } }
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; } }
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; } } }