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); }
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)); }
public MatrixImage2i(LockableMatrix <int> values, Rect2i invalidatedArea) { _image = values; InvalidatedArea = invalidatedArea; RangeZ = CalculateRangeZ(values); }