static void blockmove_transpen_flipx8(_BytePtr srcdata, int srcwidth, int srcheight, int srcmodulo, _BytePtr dstdata, int dstmodulo, UShortSubArray paldata, int transpen) { FuncDict["blockmove_transpen_flipx8"] = "blockmove_transpen_flipx8"; int end; _IntPtr sd4 = new _IntPtr(srcdata); srcmodulo += srcwidth; dstmodulo -= srcwidth; srcdata.offset -= 3; int trans4 = transpen * 0x01010101; while (srcheight != 0) { end = dstdata.offset + srcwidth; while ((srcdata.offset & 3) != 0 && dstdata.offset < end) /* longword align */ { int col = srcdata[3]; srcdata.offset--; if (col != transpen) dstdata[0] = (byte)paldata[col]; dstdata.offset++; } sd4.offset = srcdata.offset; while (dstdata.offset <= end - 4) { uint col4; if ((col4 = sd4.read32(0)) != trans4) { uint xod4 = (uint)(col4 ^ trans4); if ((xod4 & 0xff000000) != 0) dstdata[BL0] = (byte)paldata[(int)col4 >> 24]; if ((xod4 & 0x00ff0000) != 0) dstdata[BL1] = (byte)paldata[(int)(col4 >> 16) & 0xff]; if ((xod4 & 0x0000ff00) != 0) dstdata[BL2] = (byte)paldata[(int)(col4 >> 8) & 0xff]; if ((xod4 & 0x000000ff) != 0) dstdata[BL3] = (byte)paldata[((int)col4 & 0xff)]; } sd4.offset -= 4; dstdata.offset += 4; } srcdata.offset = sd4.offset; while (dstdata.offset < end) { int col = srcdata[3]; srcdata.offset--; if (col != transpen) dstdata[0] = (byte)paldata[col]; dstdata.offset++; } srcdata.offset += srcmodulo; dstdata.offset += dstmodulo; srcheight--; } }
static void blockmove_transmask8(_BytePtr srcdata, int srcwidth, int srcheight, int srcmodulo, _BytePtr dstdata, int dstmodulo, UShortSubArray paldata, int transmask) { int end; _IntPtr sd4; srcmodulo -= srcwidth; dstmodulo -= srcwidth; while (srcheight != 0) { end = dstdata.offset + srcwidth; while (((long)srcdata.offset & 3) != 0 && dstdata.offset < end) /* longword align */ { int col; col = srcdata[0]; srcdata.offset++; if (((1 << col) & transmask) == 0) dstdata[0] = (byte)paldata[col]; dstdata.offset++; } sd4 = new _IntPtr(srcdata); while (dstdata.offset <= end - 4) { int col; uint col4; col4 = sd4.read32(0); sd4.offset += 4; col = (int)((col4 >> 0) & 0xff); if (((1 << col) & transmask) == 0) dstdata[BL0] = (byte)paldata[col]; col = (int)((col4 >> 8) & 0xff); if (((1 << col) & transmask) == 0) dstdata[BL1] = (byte)paldata[col]; col = (int)((col4 >> 16) & 0xff); if (((1 << col) & transmask) == 0) dstdata[BL2] = (byte)paldata[col]; col = (int)((col4 >> 24) & 0xff); if (((1 << col) & transmask) == 0) dstdata[BL3] = (byte)paldata[col]; dstdata.offset += 4; } srcdata = new _BytePtr(sd4); while (dstdata.offset < end) { int col; col = srcdata[0]; srcdata.offset++; if (((1 << col) & transmask) == 0) dstdata[0] = (byte)paldata[col]; dstdata.offset++; } srcdata.offset += srcmodulo; dstdata.offset += dstmodulo; srcheight--; } }
static void blockmove_transpen_noremap8(_BytePtr srcdata, int srcwidth, int srcheight, int srcmodulo, _BytePtr dstdata, int dstmodulo, int transpen) { FuncDict["blockmove_transpen_noremap8"] = "blockmove_transpen_noremap8"; int end; int trans4; _IntPtr sd4; srcmodulo -= srcwidth; dstmodulo -= srcwidth; trans4 = transpen * 0x01010101; while (srcheight != 0) { end = dstdata.offset + srcwidth; while ((srcdata.offset & 3) != 0 && dstdata.offset < end) /* longword align */ { int col = srcdata[0]; srcdata.offset++; if (col != transpen) dstdata[0] = (byte)col; dstdata.offset++; } sd4 = new _IntPtr(srcdata); while (dstdata.offset <= end - 4) { uint col4; if ((col4 = sd4.read32(0)) != trans4) { uint xod4; xod4 = (uint)(col4 ^ trans4); if ((xod4 & 0x000000ff) != 0 && (xod4 & 0x0000ff00) != 0 && (xod4 & 0x00ff0000) != 0 && (xod4 & 0xff000000) != 0) { //dstdata.write32(0, col4); write_dword(dstdata, (int)col4); } else { if ((xod4 & 0xff000000) != 0) dstdata[BL3] = (byte)(col4 >> 24); if ((xod4 & 0x00ff0000) != 0) dstdata[BL2] = (byte)(col4 >> 16); if ((xod4 & 0x0000ff00) != 0) dstdata[BL1] = (byte)(col4 >> 8); if ((xod4 & 0x000000ff) != 0) dstdata[BL0] = (byte)(col4); } } sd4.offset += 4; dstdata.offset += 4; } srcdata = new _BytePtr(sd4); while (dstdata.offset < end) { int col = srcdata[0]; srcdata.offset++; if (col != transpen) dstdata[0] = (byte)col; dstdata.offset++; } srcdata.offset += srcmodulo; dstdata.offset += dstmodulo; srcheight--; } }