public IList <byte> DistinctColors(int?subImageId) { if (subImageId == null) { var buffer = new ReadOnlyByteImageBuffer(Width, Height, Width, TextureData); return(CoreUtil.DistinctColors(buffer)); } else { GetSubImageOffset(subImageId.Value, out var width, out var height, out var offset, out var stride); ReadOnlySpan <byte> slice = TextureData.Slice( offset, width + (height - 1) * stride); var buffer = new ReadOnlyByteImageBuffer((uint)width, (uint)height, (uint)stride, slice); return(CoreUtil.DistinctColors(buffer)); } }