Beispiel #1
0
 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();
     }
 }
Beispiel #2
0
        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);
        }