Exemplo n.º 1
0
 public unsafe static void ReplaceAlphaChannel(ImageRef target, ImageRef alphaOperand)
 {
     lock (target.image)
     {
         lock (alphaOperand.image)
         {
             Image        image      = target.image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
             Image        image2     = alphaOperand.image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
             Bitmap       bitmap     = (Bitmap)image;
             Bitmap       bitmap2    = (Bitmap)image2;
             BitmapData   bitmapdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
             BitmapData   data2      = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
             PixelStruct *structPtr  = (PixelStruct *)bitmapdata.Scan0;
             PixelStruct *structPtr3 = (PixelStruct *)data2.Scan0;
             int          width      = bitmapdata.Width;
             int          height     = bitmapdata.Height;
             int          num3       = bitmapdata.Stride / sizeof(PixelStruct);
             for (int i = 0; i < height; i++)
             {
                 int          num4       = 0;
                 PixelStruct *structPtr2 = structPtr + (i * num3);
                 for (PixelStruct *structPtr4 = structPtr3 + (i * num3); num4 < width; structPtr4++)
                 {
                     structPtr2->a = structPtr4->a;
                     num4++;
                     structPtr2++;
                 }
             }
             bitmap.UnlockBits(bitmapdata);
             bitmap2.UnlockBits(data2);
         }
     }
 }
Exemplo n.º 2
0
        public unsafe Transparentness GetTransparentness()
        {
            Transparentness entirelyTransparent;

            lock (this)
            {
                Bitmap     bitmap     = (Bitmap)IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                BitmapData bitmapdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                                        ImageLockMode.ReadWrite,
                                                        PixelFormat.Format32bppArgb);
                bool flag      = false;
                bool condition = false;
                try
                {
                    PixelStruct *structPtr = (PixelStruct *)bitmapdata.Scan0;
                    for (int i = 0; i < bitmapdata.Height; i++)
                    {
                        for (int j = 0; j < bitmapdata.Width; j++)
                        {
                            PixelStruct *structPtr2 = structPtr + i * bitmapdata.Stride / sizeof(PixelStruct) + j;
                            if (structPtr2->a != 0)
                            {
                                flag = true;
                            }
                            else
                            {
                                condition = true;
                            }

                            if (flag && condition)
                            {
                                return(Transparentness.SomeOfEach);
                            }
                        }
                    }

                    if (flag)
                    {
                        D.Assert(!condition);
                        return(Transparentness.EntirelyOpaque);
                    }

                    D.Assert(condition);
                    entirelyTransparent = Transparentness.EntirelyTransparent;
                }
                finally
                {
                    bitmap.UnlockBits(bitmapdata);
                }
            }

            return(entirelyTransparent);
        }
Exemplo n.º 3
0
        private unsafe Present FadeTile(ImageRef sourceImage, double fadeFactor)
        {
            GDIBigLockedImage image = new GDIBigLockedImage(sourceImage.image.Size, "FadeVerb");

            lock (sourceImage.image)
            {
                Image image2 = sourceImage.image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                lock (image)
                {
                    Image      image3     = image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                    Bitmap     bitmap     = (Bitmap)image2;
                    Bitmap     bitmap2    = (Bitmap)image3;
                    BitmapData bitmapdata = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height),
                                                             ImageLockMode.WriteOnly,
                                                             PixelFormat.Format32bppArgb);
                    BitmapData data2 = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                                       ImageLockMode.ReadOnly,
                                                       PixelFormat.Format32bppArgb);
                    PixelStruct *structPtr  = (PixelStruct *)bitmapdata.Scan0;
                    PixelStruct *structPtr3 = (PixelStruct *)data2.Scan0;
                    int          width      = bitmapdata.Width;
                    int          height     = bitmapdata.Height;
                    int          num3       = bitmapdata.Stride / sizeof(PixelStruct);
                    for (int i = 0; i < height; i++)
                    {
                        int num4 = 0;
                        for (PixelStruct *structPtr2 = structPtr + i * num3; num4 < width; structPtr2++)
                        {
                            PixelStruct *structPtr4 = structPtr3 + i * num3 + num4;
                            structPtr2[0] = structPtr4[0];
                            structPtr2->a = (byte)(structPtr2->a * fadeFactor);
                            num4++;
                        }
                    }

                    bitmap2.UnlockBits(bitmapdata);
                    bitmap.UnlockBits(data2);
                }
            }

            sourceImage.Dispose();
            return(new ImageRef(new ImageRefCounted(image)));
        }
Exemplo n.º 4
0
        public static unsafe void doWarp(GDIBigLockedImage destImage, GDIBigLockedImage sourceImage,
                                         IPointTransformer[] pointTransformers, InterpolationMode mode)
        {
            Bitmap     bitmap;
            BitmapData data;
            Bitmap     bitmap2;
            BitmapData data2;
            DateTime   now = DateTime.Now;
            PointD     td  = new PointD();
            PointD     td2 = new PointD();

            lock (destImage)
            {
                bitmap = (Bitmap)destImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                data   = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                         ImageLockMode.WriteOnly,
                                         PixelFormat.Format32bppArgb);
            }

            lock (sourceImage)
            {
                bitmap2 = (Bitmap)sourceImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                data2   = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height),
                                           ImageLockMode.ReadOnly,
                                           PixelFormat.Format32bppArgb);
            }

            PixelStruct *structPtr  = (PixelStruct *)data.Scan0;
            int          width      = data.Width;
            int          height     = data.Height;
            int          num9       = data.Stride / sizeof(PixelStruct);
            PixelStruct *structPtr3 = (PixelStruct *)data2.Scan0;
            int          num10      = data2.Width;
            int          num11      = data2.Height;
            int          num12      = data2.Stride / sizeof(PixelStruct);
            int          num15      = num11 - 1;

            for (int i = 0; i < height; i++)
            {
                int num13 = 0;
                for (PixelStruct *structPtr2 = structPtr + (height - 1 - i) * num9; num13 < width; structPtr2++)
                {
                    int          x;
                    int          num2;
                    PixelStruct *structPtr4;
                    td.x = num13;
                    td.y = i;
                    for (int j = 0; j < pointTransformers.Length; j++)
                    {
                        pointTransformers[j].doTransform(td, td2);
                        td.x = td2.x;
                        td.y = td2.y;
                    }

                    if (mode == InterpolationMode.NearestNeighbor)
                    {
                        x    = (int)td.x;
                        num2 = num15 - (int)td.y;
                        if (x >= 0 && x < num10 && num2 >= 0 && num2 < num11)
                        {
                            structPtr4    = structPtr3 + num2 * num12 + x;
                            structPtr2[0] = structPtr4[0];
                        }
                    }
                    else
                    {
                        if (mode != InterpolationMode.Bilinear)
                        {
                            throw new Exception("Unimplemented mode");
                        }

                        double   num17 = num15 - td.y;
                        int      num3  = (int)td.x;
                        int      num4  = (int)num17;
                        double   num5  = td.x - num3;
                        double   num6  = num17 - num4;
                        IntPixel pixel = IntPixel.BlackPixel();
                        int      num20 = 0;
                        for (double k = 1.0 - num5; num20 <= 1; k = num5)
                        {
                            int num21 = 0;
                            for (double m = 1.0 - num6; num21 <= 1; m = num6)
                            {
                                x    = num3 + num20;
                                num2 = num4 + num21;
                                if (x >= 0 && x < num10 && num2 >= 0 && num2 < num11)
                                {
                                    structPtr4 = structPtr3 + num2 * num12 + x;
                                    pixel.addWeighted(k * m, structPtr4[0]);
                                }

                                num21++;
                            }

                            num20++;
                        }

                        structPtr2[0] = pixel.AsPixel();
                    }

                    num13++;
                }
            }

            lock (destImage)
            {
                bitmap.UnlockBits(data);
            }

            lock (sourceImage)
            {
                bitmap2.UnlockBits(data2);
            }
        }
Exemplo n.º 5
0
        private unsafe Present Evaluate(params Present[] paramList)
        {
            D.Assert(paramList.Length == 2);
            if (!(paramList[0] is ImageRef))
            {
                return(paramList[0]);
            }
            if (!(paramList[1] is ImageRef))
            {
                return(paramList[1]);
            }
            ImageRef          ref2  = (ImageRef)paramList[0];
            ImageRef          ref3  = (ImageRef)paramList[1];
            GDIBigLockedImage image = new GDIBigLockedImage(ref2.image.Size, "TransparencyFuture");

            lock (ref2.image)
            {
                Image image2 = ref2.image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                lock (ref3.image)
                {
                    Image image3 = ref3.image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                    lock (image)
                    {
                        BitmapData data3;
                        Image      image4     = image.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                        Bitmap     bitmap     = (Bitmap)image2;
                        Bitmap     bitmap2    = (Bitmap)image4;
                        Bitmap     bitmap3    = (Bitmap)image3;
                        BitmapData bitmapdata = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
                        BitmapData data2      = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                        if (bitmap3 == bitmap)
                        {
                            data3 = data2;
                        }
                        else
                        {
                            data3 = bitmap3.LockBits(new Rectangle(0, 0, bitmap3.Width, bitmap3.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                        }
                        PixelStruct *structPtr  = (PixelStruct *)bitmapdata.Scan0;
                        PixelStruct *structPtr3 = (PixelStruct *)data2.Scan0;
                        PixelStruct *structPtr5 = (PixelStruct *)data3.Scan0;
                        int          width      = bitmapdata.Width;
                        int          height     = bitmapdata.Height;
                        int          num3       = bitmapdata.Stride / sizeof(PixelStruct);
                        for (int i = 0; i < height; i++)
                        {
                            int num4 = 0;
                            for (PixelStruct *structPtr2 = structPtr + (i * num3); num4 < width; structPtr2++)
                            {
                                PixelStruct *structPtr4 = (structPtr3 + (i * num3)) + num4;
                                PixelStruct *structPtr6 = (structPtr5 + (i * num3)) + num4;
                                structPtr2[0] = structPtr4[0];
                                if (this.transparencyOptions.ShouldBeTransparent(structPtr6->r, structPtr6->g, structPtr6->b))
                                {
                                    structPtr2->a = 0;
                                }
                                num4++;
                            }
                        }
                        bitmap2.UnlockBits(bitmapdata);
                        bitmap.UnlockBits(data2);
                        if (bitmap3 != bitmap)
                        {
                            bitmap3.UnlockBits(data3);
                        }
                    }
                }
            }
            ref2.Dispose();
            ref3.Dispose();
            ImageRef source = new ImageRef(new ImageRefCounted(image));
            int      num6   = 0;

            foreach (TransparencyColor color in this.transparencyOptions.colorList)
            {
                num6 = Math.Max(num6, color.halo);
            }
            if (num6 > 0)
            {
                HaloTransparency(source, num6);
            }
            return(source);
        }