public IImage2i CreateImage()
        {
            if (_invalidatedArea.HasValue)
            {
                // Debug.LogFormat("Update readonlyCount:{0}", _readonlyMatrices.Count);

                var readonlyMatrix = _readonlyMatrices.FirstOrDefault(o => !o.IsLocked);
                if (readonlyMatrix == null)
                {
                    readonlyMatrix = new LockableMatrix <int>(_editableMatrix.size);
                    _readonlyMatrices.Add(readonlyMatrix);
                }

                //sync
                for (int x = 0; x < _editableMatrix.size.x; x++)
                {
                    for (int y = 0; y < _editableMatrix.size.y; y++)
                    {
                        readonlyMatrix[x, y] = _editableMatrix[x, y];
                    }
                }

                // Debug.LogError($"_readonlyMatrices: {_readonlyMatrices.Count}");

                var oldImage = _image;
                oldImage?.Dispose();

                _image           = new MatrixImage2i(readonlyMatrix, _invalidatedArea.Value);
                _invalidatedArea = null;
            }
            return(_image);
        }
Exemple #2
0
        private static Range2i CalculateRangeZ(LockableMatrix <int> values)
        {
            int countX = values.size.x;
            int countY = values.size.y;

            int min = int.MaxValue;
            int max = int.MinValue;

            for (int x = 0; x < countX; x++)
            {
                for (int y = 0; y < countY; y++)
                {
                    int val = values[x, y];

                    min = Math.Min(min, val);
                    max = Math.Max(max, val);
                }
            }
            return(new Range2i(min, max));
        }
Exemple #3
0
 public MatrixImage2i(LockableMatrix <int> values, Rect2i invalidatedArea)
 {
     _image          = values;
     InvalidatedArea = invalidatedArea;
     RangeZ          = CalculateRangeZ(values);
 }