public void CopyTo(FastBitmap bitmap, int destx, int desty, int srcx, int srcy, int width, int height) { try { this.Lock(); bitmap.Lock(); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { Color pixel = this.GetPixel(srcx + j, srcy + i); bitmap.SetPixel(destx + j, desty + i, pixel); } } } finally { this.Unlock(); bitmap.Unlock(); } }
internal FastBitmap Flatten() { Layer layer; FastBitmap bitmap = new FastBitmap(this._width, this._height, PixelFormat.Format24bppRgb); bitmap.Lock(); int num = 0; while (num < this._layers.Count) { layer = this._layers[num]; layer._bitmap.Lock(); if (layer.Mask != null) { layer.Mask.Lock(); } num++; } for (int i = 0; i < this._height; i++) { for (int j = 0; j < this._width; j++) { Color pixel = this._layers[0]._bitmap.GetPixel(j, i); num = 1; while (num < this._layers.Count) { Layer layer2 = this._layers[num]; Color transparent = Color.Transparent; if ((((j >= layer2.OffsetX) && (j <= ((layer2.OffsetX + layer2._bitmap.Width) - 1))) && (i >= layer2.OffsetY)) && (i <= ((layer2.OffsetY + layer2._bitmap.Height) - 1))) { transparent = layer2._bitmap.GetPixel(j - layer2.OffsetX, i - layer2.OffsetY); } if (((transparent.A == 0xff) && (layer2.Opacity == 1.0)) && (layer2.Mask == null)) { pixel = transparent; } else { double num7 = (((double)transparent.A) / 255.0) * layer2.Opacity; if (layer2.Mask != null) { num7 *= ((double)layer2.Mask.GetIntensity(j, i)) / 255.0; } double a = (transparent.R * num7) + (pixel.R * (1.0 - num7)); double num5 = (transparent.G * num7) + (pixel.G * (1.0 - num7)); double num6 = (transparent.B * num7) + (pixel.B * (1.0 - num7)); a = Math.Round(a); num5 = Math.Round(num5); num6 = Math.Round(num6); a = Math.Min(a, 255.0); num5 = Math.Min(num5, 255.0); num6 = Math.Min(num6, 255.0); pixel = Color.FromArgb((byte)a, (byte)num5, (byte)num6); } num++; } bitmap.SetPixel(j, i, pixel); } } for (num = 0; num < this._layers.Count; num++) { layer = this._layers[num]; layer._bitmap.Unlock(); if (layer.Mask != null) { layer.Mask.Unlock(); } } bitmap.Unlock(); return(bitmap); }