public Bitmap GetBitmap() { MemoryStream memoryStream = new MemoryStream(); ImageFactory imgF = new ImageFactory() .Load(new Bitmap(Width, Height)); SortLayers(); //better safe than sorry, probably not needed, todo [logging] check if this changes anything at anytime, then provide warning for (int i = 0; i < _layers.Count; i++) { DmiEXLayer dmiExLayer = _layers[i]; if (!dmiExLayer.Visible) { continue; } ImageLayer l = new ImageLayer { Image = dmiExLayer.GetBitmap() }; imgF.Overlay(l); } imgF.Resolution(Width, Height) .Format(new PngFormat()) .BackgroundColor(Color.Transparent) .Save(memoryStream); return(new Bitmap(memoryStream)); }
public DmiEXLayer GetLayerByIndex(int index) { DmiEXLayer layer = _layers.Find((l) => l.Index == index); if (layer == null) { throw new ArgumentException("No Layer with that Index exists"); } return(layer); }
public void RemoveLayer(DmiEXLayer l) { if (_layers.Count == 1) { throw new WarningException("You can't remove the only Layer of the image"); } l.IndexChanged -= SortLayers; l.Changed -= OnImageChanged; _layers.Remove(l); LayerListChanged?.Invoke(this, EventArgs.Empty); }
private void ClearIndex(int index) { DmiEXLayer[] layers = _layers.ToArray(); for (int i = 0; i < layers.Length; i++) { DmiEXLayer layer = layers[i]; if (layer.Index != index) { continue; } layer.Index++; index++; } }
public DmiEXLayer AddLayer(DmiEXLayer l) { if (_layers.Contains(l)) { throw new ArgumentException("Layer already part of image"); } ClearIndex(l.Index); _layers.Add(l); SortLayers(); l.IndexChanged += SortLayers; l.Changed += OnImageChanged; //any change on the layer means a change on the image LayerListChanged?.Invoke(this, EventArgs.Empty); return(l); }
public void SetLayerIndex(DmiEXLayer layer, int index) { ClearIndex(index); layer.Index = index; }