Beispiel #1
0
        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--;
            }
        }
Beispiel #2
0
        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--;
            }
        }
Beispiel #3
0
        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--;
            }
        }
Beispiel #4
0
 public _IntPtr(_IntPtr ip, int offset)
 {
     this.buffer = ip.buffer;
     this.offset=offset;
 }