Ejemplo n.º 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();
     }
 }
Ejemplo n.º 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);
        }
Ejemplo n.º 3
0
        public static void ApplyTo(FastBitmap bitmap, int horz, int vert)
        {
            float      num;
            int        num8;
            int        num9;
            int        num10;
            float      num11;
            float      num13;
            int        num15;
            byte       num17;
            byte       num18;
            byte       num19;
            byte       num20;
            FastBitmap bitmap2 = (FastBitmap)bitmap.Clone();

            bitmap.Lock();
            bitmap2.Lock();
            int    width    = bitmap.Width;
            int    height   = bitmap.Height;
            double a        = 0.0;
            double num5     = 0.0;
            double num6     = 0.0;
            double num7     = 0.0;
            bool   hasAlpha = bitmap.HasAlpha;

            float[] numArray = new float[(horz * 2) + 1];
            numArray[horz] = 1f;
            int index = 0;

            while (index < horz)
            {
                num13           = Sigmoid((float)index, 0f, (float)((horz + 1) / 2), (float)(horz + 1));
                numArray[index] = num13;
                numArray[(horz * 2) - index] = num13;
                index++;
            }
            int y = 0;

            while (y < bitmap.Height)
            {
                num15 = 0;
                while (num15 < bitmap.Width)
                {
                    a    = 0.0;
                    num5 = 0.0;
                    num6 = 0.0;
                    num7 = 0.0;
                    num  = 0f;
                    for (index = 0; index < ((horz * 2) + 1); index++)
                    {
                        int x = (num15 - horz) + index;
                        if (x < 0)
                        {
                            index += -x;
                            x      = 0;
                        }
                        if (x > (width - 1))
                        {
                            break;
                        }
                        num8  = bitmap.GetPixelInt32(x, y);
                        num11 = numArray[index];
                        a    += ((num8 >> 0x10) & 0xff) * num11;
                        num5 += ((num8 >> 8) & 0xff) * num11;
                        num6 += (num8 & 0xff) * num11;
                        if (hasAlpha)
                        {
                            num10 = (num8 >> 0x18) & 0xff;
                            a    /= 255.0 * num10;
                            num5 /= 255.0 * num10;
                            num6 /= 255.0 * num10;
                            num7 += num10 * num11;
                        }
                        num += num11;
                    }
                    a    /= (double)num;
                    num5 /= (double)num;
                    num6 /= (double)num;
                    num7 /= (double)num;
                    num17 = (byte)Math.Round(a);
                    num18 = (byte)Math.Round(num5);
                    num19 = (byte)Math.Round(num6);
                    num20 = (byte)Math.Round(num7);
                    if (num17 > 0xff)
                    {
                        num17 = 0xff;
                    }
                    if (num18 > 0xff)
                    {
                        num18 = 0xff;
                    }
                    if (num19 > 0xff)
                    {
                        num19 = 0xff;
                    }
                    if (num20 > 0xff)
                    {
                        num20 = 0xff;
                    }
                    num9  = num20;
                    num9  = num9 << 8;
                    num9 |= num17;
                    num9  = num9 << 8;
                    num9 |= num18;
                    num9  = num9 << 8;
                    num9 |= num19;
                    bitmap2.SetPixelInt32(num15, y, num9);
                    num15++;
                }
                y++;
            }
            numArray       = new float[(vert * 2) + 1];
            numArray[vert] = 1f;
            index          = 0;
            while (index < vert)
            {
                num13           = Sigmoid((float)index, 0f, (float)((vert + 1) / 2), (float)(vert + 1));
                numArray[index] = num13;
                numArray[(vert * 2) - index] = num13;
                index++;
            }
            for (num15 = 0; num15 < bitmap.Width; num15++)
            {
                for (y = 0; y < bitmap.Height; y++)
                {
                    a    = 0.0;
                    num5 = 0.0;
                    num6 = 0.0;
                    num7 = 0.0;
                    num  = 0f;
                    for (index = 0; index < ((vert * 2) + 1); index++)
                    {
                        int num21 = (y - vert) + index;
                        if (num21 < 0)
                        {
                            index += -num21;
                            num21  = 0;
                        }
                        if (num21 > (height - 1))
                        {
                            break;
                        }
                        num8  = bitmap2.GetPixelInt32(num15, num21);
                        num11 = numArray[index];
                        a    += ((num8 >> 0x10) & 0xff) * num11;
                        num5 += ((num8 >> 8) & 0xff) * num11;
                        num6 += (num8 & 0xff) * num11;
                        if (hasAlpha)
                        {
                            num10 = (num8 >> 0x18) & 0xff;
                            a    /= 255.0 * num10;
                            num5 /= 255.0 * num10;
                            num6 /= 255.0 * num10;
                            num7 += num10 * num11;
                        }
                        num += num11;
                    }
                    a    /= (double)num;
                    num5 /= (double)num;
                    num6 /= (double)num;
                    num7 /= (double)num;
                    num17 = (byte)Math.Round(a);
                    num18 = (byte)Math.Round(num5);
                    num19 = (byte)Math.Round(num6);
                    num20 = (byte)Math.Round(num7);
                    if (num17 > 0xff)
                    {
                        num17 = 0xff;
                    }
                    if (num18 > 0xff)
                    {
                        num18 = 0xff;
                    }
                    if (num19 > 0xff)
                    {
                        num19 = 0xff;
                    }
                    if (num20 > 0xff)
                    {
                        num20 = 0xff;
                    }
                    num9  = num20;
                    num9  = num9 << 8;
                    num9 |= num17;
                    num9  = num9 << 8;
                    num9 |= num18;
                    num9  = num9 << 8;
                    num9 |= num19;
                    bitmap.SetPixelInt32(num15, y, num9);
                }
            }
            bitmap2.Dispose();
            bitmap.Unlock();
        }