示例#1
0
        static IntPtr mask(IntPtr Self, IntPtr Args)
        {
            Ruby.Array.Expect(Args, 2, 3, 4, 5);
            odl.Bitmap result = null;
            long       len    = Ruby.Array.Length(Args);

            if (len == 2)
            {
                Ruby.Array.Expect(Args, 0, "Bitmap");
                Ruby.Array.Expect(Args, 1, "Bitmap");
                GuardDisposed(Ruby.Array.Get(Args, 0));
                GuardDisposed(Ruby.Array.Get(Args, 1));
                odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)];
                odl.Bitmap srcbmp  = BitmapDictionary[Ruby.Array.Get(Args, 1)];
                result = odl.Bitmap.Mask(maskbmp, srcbmp);
            }
            else if (len == 3)
            {
                Ruby.Array.Expect(Args, 0, "Bitmap");
                Ruby.Array.Expect(Args, 1, "Bitmap");
                Ruby.Array.Expect(Args, 2, "Rect");
                GuardDisposed(Ruby.Array.Get(Args, 0));
                GuardDisposed(Ruby.Array.Get(Args, 1));
                odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)];
                odl.Bitmap srcbmp  = BitmapDictionary[Ruby.Array.Get(Args, 1)];
                odl.Rect   srcrect = Rect.CreateRect(Ruby.Array.Get(Args, 2));
                result = odl.Bitmap.Mask(maskbmp, srcbmp, srcrect);
            }
            else if (len == 4)
            {
                Ruby.Array.Expect(Args, 0, "Bitmap");
                Ruby.Array.Expect(Args, 1, "Bitmap");
                Ruby.Array.Expect(Args, 2, "Integer");
                Ruby.Array.Expect(Args, 3, "Integer");
                GuardDisposed(Ruby.Array.Get(Args, 0));
                GuardDisposed(Ruby.Array.Get(Args, 1));
                odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)];
                odl.Bitmap srcbmp  = BitmapDictionary[Ruby.Array.Get(Args, 1)];
                int        offsetx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2));
                int        offsety = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3));
                result = odl.Bitmap.Mask(maskbmp, srcbmp, offsetx, offsety);
            }
            else if (len == 5)
            {
                Ruby.Array.Expect(Args, 0, "Bitmap");
                Ruby.Array.Expect(Args, 1, "Bitmap");
                Ruby.Array.Expect(Args, 2, "Rect");
                Ruby.Array.Expect(Args, 3, "Integer");
                Ruby.Array.Expect(Args, 4, "Integer");
                GuardDisposed(Ruby.Array.Get(Args, 0));
                GuardDisposed(Ruby.Array.Get(Args, 1));
                odl.Bitmap maskbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)];
                odl.Bitmap srcbmp  = BitmapDictionary[Ruby.Array.Get(Args, 1)];
                odl.Rect   srcrect = Rect.CreateRect(Ruby.Array.Get(Args, 2));
                int        offsetx = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3));
                int        offsety = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 4));
                result = odl.Bitmap.Mask(maskbmp, srcbmp, srcrect, offsetx, offsety);
            }
            return(Bitmap.CreateBitmap(result));
        }
示例#2
0
        public static IntPtr CreateBitmap(odl.Bitmap Bitmap)
        {
            IntPtr bmp = Ruby.Class.Allocate(Class);

            Ruby.SetIVar(bmp, "@width", Ruby.Integer.ToPtr(Bitmap.Width));
            Ruby.SetIVar(bmp, "@height", Ruby.Integer.ToPtr(Bitmap.Height));
            Ruby.SetIVar(bmp, "@autolock", Ruby.True);
            Ruby.SetIVar(bmp, "@font", Font.CreateFont());
            if (BitmapDictionary.ContainsKey(bmp))
            {
                BitmapDictionary[bmp].Dispose();
                BitmapDictionary.Remove(bmp);
            }
            BitmapDictionary.Add(bmp, Bitmap);
            return(bmp);
        }
示例#3
0
        static IntPtr initialize(IntPtr Self, IntPtr Args)
        {
            Ruby.Array.Expect(Args, 1, 2, 3, 4);
            odl.Bitmap bmp = null;
            long       len = Ruby.Array.Length(Args);

            if (len == 1)
            {
                if (Ruby.Array.Is(Args, 0, "Bitmap"))
                {
                    bmp = BitmapDictionary[Ruby.Array.Get(Args, 0)];
                }
                else
                {
                    Ruby.Array.Expect(Args, 0, "String");
                    bmp = new odl.Bitmap(Ruby.String.FromPtr(Ruby.Array.Get(Args, 0)));
                }
            }
            else if (len == 2)
            {
                Ruby.Array.Expect(Args, 0, "Integer");
                Ruby.Array.Expect(Args, 1, "Integer");
                bmp = new odl.Bitmap((int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0)), (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1)));
            }
            else if (len == 3 || len == 4)
            {
                Ruby.Array.Expect(Args, 0, "Array");
                Ruby.Array.Expect(Args, 1, "Integer");
                Ruby.Array.Expect(Args, 2, "Integer");
                if (len == 4)
                {
                    Ruby.Array.Expect(Args, 3, "TrueClass", "FalseClass");
                }
                IntPtr pixelarray = Ruby.Array.Get(Args, 0);
                long   pixellen   = Ruby.Array.Length(pixelarray);
                byte[] bytearray  = new byte[pixellen];
                bool   validate   = len == 3 || Ruby.Array.Get(Args, 3) == Ruby.True;
                for (int i = 0; i < pixellen; i++)
                {
                    if (validate)
                    {
                        Ruby.Array.Expect(pixelarray, i, "Integer");
                    }
                    bytearray[i] = (byte)Ruby.Integer.FromPtr(Ruby.Array.Get(pixelarray, i));
                }
                int width  = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1));
                int height = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2));
                bmp = new odl.Bitmap(bytearray, width, height);
            }
            Ruby.SetIVar(Self, "@width", Ruby.Integer.ToPtr(bmp.Width));
            Ruby.SetIVar(Self, "@height", Ruby.Integer.ToPtr(bmp.Height));
            Ruby.SetIVar(Self, "@autolock", Ruby.True);
            Ruby.SetIVar(Self, "@font", Font.CreateFont());

            if (BitmapDictionary.ContainsKey(Self))
            {
                BitmapDictionary[Self].Dispose();
                BitmapDictionary.Remove(Self);
            }
            BitmapDictionary.Add(Self, bmp);
            return(Self);
        }
示例#4
0
        static IntPtr blt(IntPtr Self, IntPtr Args)
        {
            GuardDisposed(Self);
            Ruby.Array.Expect(Args, 1, 3, 4, 6, 9);
            int dx = 0,
                dy = 0,
                dw = 0,
                dh = 0;

            odl.Bitmap srcbmp = null;
            int        sx     = 0,
                       sy     = 0,
                       sw     = 0,
                       sh     = 0;
            long len          = Ruby.Array.Length(Args);

            if (len == 1) // bmp
            {
                Ruby.Array.Expect(Args, 0, "Bitmap");
                srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 0)];
                dw     = srcbmp.Width;
                dh     = srcbmp.Height;
                sw     = srcbmp.Width;
                sh     = srcbmp.Height;
            }
            else if (len == 3) // destrect, bmp, srcrect
            {
                Ruby.Array.Expect(Args, 0, "Rect");
                Ruby.Array.Expect(Args, 1, "Bitmap");
                Ruby.Array.Expect(Args, 2, "Rect");

                if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@x", "Float"))
                {
                    dx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@x"));
                }
                else
                {
                    dx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@x"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@y", "Float"))
                {
                    dy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@y"));
                }
                else
                {
                    dy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@y"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@width", "Float"))
                {
                    dw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@width"));
                }
                else
                {
                    dw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@width"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 0), "@height", "Float"))
                {
                    dh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@height"));
                }
                else
                {
                    dh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 0), "@height"));
                }
                srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 1)];
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@x", "Float"))
                {
                    sx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@x"));
                }
                else
                {
                    sx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@x"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@y", "Float"))
                {
                    sy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@y"));
                }
                else
                {
                    sy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@y"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@width", "Float"))
                {
                    sw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@width"));
                }
                else
                {
                    sw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@width"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 2), "@height", "Float"))
                {
                    sh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@height"));
                }
                else
                {
                    sh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 2), "@height"));
                }
            }
            else if (len == 4) // dx, dy, bmp, srcrect
            {
                Ruby.Array.Expect(Args, 0, "Integer");
                Ruby.Array.Expect(Args, 1, "Integer");
                Ruby.Array.Expect(Args, 2, "Bitmap");
                Ruby.Array.Expect(Args, 3, "Rect");
                dx     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0));
                dy     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1));
                srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 2)];
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@x", "Float"))
                {
                    sx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@x"));
                }
                else
                {
                    sx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@x"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@y", "Float"))
                {
                    sy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@y"));
                }
                else
                {
                    sy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@y"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@width", "Float"))
                {
                    sw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@width"));
                }
                else
                {
                    sw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@width"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 3), "@height", "Float"))
                {
                    sh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@height"));
                }
                else
                {
                    sh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 3), "@height"));
                }
                dw = sw;
                dh = sh;
            }
            else if (len == 6) // dx, dy, dw, dh, bmp, srcrect
            {
                Ruby.Array.Expect(Args, 0, "Integer");
                Ruby.Array.Expect(Args, 1, "Integer");
                Ruby.Array.Expect(Args, 2, "Integer");
                Ruby.Array.Expect(Args, 3, "Integer");
                Ruby.Array.Expect(Args, 4, "Bitmap");
                Ruby.Array.Expect(Args, 5, "Rect");
                dx     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0));
                dy     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1));
                dw     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2));
                dh     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3));
                srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 4)];
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@x", "Float"))
                {
                    sx = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@x"));
                }
                else
                {
                    sx = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@x"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@y", "Float"))
                {
                    sy = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@y"));
                }
                else
                {
                    sy = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@y"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@width", "Float"))
                {
                    sw = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@width"));
                }
                else
                {
                    sw = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@width"));
                }
                if (Ruby.IVarIs(Ruby.Array.Get(Args, 5), "@height", "Float"))
                {
                    sh = Ruby.Float.RoundFromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@height"));
                }
                else
                {
                    sh = (int)Ruby.Integer.FromPtr(Ruby.GetIVar(Ruby.Array.Get(Args, 5), "@height"));
                }
            }
            else if (len == 9) // dx, dy, dw, dh, bmp, sx, sy, sw, sh
            {
                Ruby.Array.Expect(Args, 0, "Integer");
                Ruby.Array.Expect(Args, 1, "Integer");
                Ruby.Array.Expect(Args, 2, "Integer");
                Ruby.Array.Expect(Args, 3, "Integer");
                Ruby.Array.Expect(Args, 4, "Bitmap");
                Ruby.Array.Expect(Args, 5, "Integer");
                Ruby.Array.Expect(Args, 6, "Integer");
                Ruby.Array.Expect(Args, 7, "Integer");
                Ruby.Array.Expect(Args, 8, "Integer");
                dx     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 0));
                dy     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 1));
                dw     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 2));
                dh     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 3));
                srcbmp = BitmapDictionary[Ruby.Array.Get(Args, 4)];
                sx     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 5));
                sy     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 6));
                sw     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 7));
                sh     = (int)Ruby.Integer.FromPtr(Ruby.Array.Get(Args, 8));
            }
            AutoUnlock(Self);
            BitmapDictionary[Self].Build(dx, dy, dw, dh, srcbmp, sx, sy, sw, sh);
            AutoLock(Self);
            return(Ruby.True);
        }