コード例 #1
0
ファイル: Animation.cs プロジェクト: markadr/dmd-extensions
        public void DetectLCM(byte[] plane, uint NoMaskCRC, bool Reverse)
        {
            bool clear       = true;
            uint checksum    = NoMaskCRC;
            var  maskSize    = Width * Height / 8;
            var  maskedPlane = new byte[maskSize];

            for (int k = -1; k < Masks.Length; k++)
            {
                if (k >= 0)
                {
                    checksum = FrameUtil.ChecksumWithMask(plane, Masks[k], Reverse);
                }
                foreach (var af in Frames)
                {
                    if (af.Hash == checksum)
                    {
                        if (clear)
                        {
                            ClearLCMBuffer();
                            clear = false;
                        }
                        for (int i = 0; i < af.Planes.Count; i++)
                        {
                            FrameUtil.OrPlane(af.PlaneData[i], LCMBufferPlanes[i]);
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: Animation.cs プロジェクト: markadr/dmd-extensions
 public void DetectFollow(byte[] plane, uint NoMaskCRC, bool Reverse)
 {
     if (NoMaskCRC == FollowHash || FrameUtil.ChecksumWithMask(plane, FollowMask, Reverse) == FollowHash)
     {
         FoundFollowMatch = true;
     }
 }
コード例 #3
0
        public void DetectFollow(byte[] plane, uint NoMaskCRC, byte[][] masks, bool Reverse)
        {
            var frameIndex = 0;

            foreach (var af in Frames)
            {
                if (NoMaskCRC == af.Hash)
                {
                    _frameIndex = frameIndex;
                    return;
                }
                if (masks != null && masks.Length > 0)
                {
                    foreach (var mask in masks)
                    {
                        var maskcrc = FrameUtil.ChecksumWithMask(plane, mask, Reverse);
                        if (maskcrc == af.Hash)
                        {
                            _frameIndex = frameIndex;
                            return;
                        }
                    }
                }
                frameIndex++;
            }
        }
コード例 #4
0
        public bool DetectLCM(byte[] plane, uint NoMaskCRC, bool Reverse, bool clear)
        {
            uint checksum    = NoMaskCRC;
            var  maskSize    = Width * Height / 8;
            var  maskedPlane = new byte[maskSize];

            for (int k = -1; k < Masks.Length; k++)
            {
                if (k >= 0)
                {
                    checksum = FrameUtil.ChecksumWithMask(plane, Masks[k], Reverse);
                }
                foreach (var af in Frames)
                {
                    if (af.Hash == checksum)
                    {
                        if (clear)
                        {
                            ClearLCMBuffer();
                            clear = false;
                            if (SwitchMode == SwitchMode.MaskedReplace)
                            {
                                Common.FrameUtil.ClearPlane(ReplaceMask);
                            }
                        }

                        for (int i = 0; i < af.Planes.Count; i++)
                        {
                            FrameUtil.OrPlane(af.PlaneData[i], LCMBufferPlanes[i]);
                            if (SwitchMode == SwitchMode.MaskedReplace)
                            {
                                FrameUtil.OrPlane(af.Mask, ReplaceMask);
                            }
                        }
                    }
                }
            }
            return(clear);
        }