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]); } } } } }
public void DetectFollow(byte[] plane, uint NoMaskCRC, bool Reverse) { if (NoMaskCRC == FollowHash || FrameUtil.ChecksumWithMask(plane, FollowMask, Reverse) == FollowHash) { FoundFollowMatch = true; } }
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++; } }
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); }