Beispiel #1
0
        public unsafe void CopyBlock(Rectangle block, ref byte[] dest)
        {
            int calc       = 0;
            int WidthSize  = block.Width * Info.PixelSize;
            int CopyOffset = 0;
            int scan0      = Scan0.ToInt32();
            int destSize   = WidthSize * block.Height;

            if (dest == null || dest.Length != destSize)
            {
                dest = new byte[destSize];
            }

            calc = (block.Y) * Info.Stride + block.X * Info.PixelSize;

            fixed(byte *ptr = dest)
            {
                for (int i = 0; i < block.Height; i++)
                {
                    NativeMethods.memcpy(new IntPtr(ptr + CopyOffset), new IntPtr(scan0 + calc), (uint)WidthSize);
                    calc       += Info.Stride;
                    CopyOffset += WidthSize;
                }
            }
        }
Beispiel #2
0
        public void Lock()
        {
            if (Locked)
            {
                throw new Exception("Already locked");
            }

            lock (ProcessingLock)
            {
                bitmapData = bitMap.LockBits(new Rectangle(0, 0, bitMap.Width, bitMap.Height), ImageLockMode.ReadWrite, bitMap.PixelFormat);

                Info = new SimpleBitmapInfo(bitmapData);

                Scan0     = bitmapData.Scan0;
                Scan0_int = Scan0.ToInt32();
            }
        }