Exemple #1
0
        unsafe public static ColorImage FrameToColorImage(Frame frame)
        {
            OniFrame *frameHandle = (OniFrame *)frame.Handle;
            int       width       = (*frameHandle).width;
            int       height      = (*frameHandle).height;


            int bytePerPixel = oniFormatBytesPerPixel((*frameHandle).videoMode.pixelFormat);

            Bitmap     bitmap    = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            Rectangle  imageRect = new Rectangle(0, 0, width, height);
            BitmapData bmpData   = bitmap.LockBits(imageRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);

            byte *source = (byte *)(*frameHandle).data;
            byte *target = (byte *)(void *)bmpData.Scan0;

            for (int y = 0; y < height; y++)
            {
                byte *sourceLine = source + y * width * 3;
                for (int x = 0; x < width; x++)
                {
                    target[2] = *sourceLine++;
                    target[1] = *sourceLine++;
                    target[0] = *sourceLine++;
                    target   += 3;
                }
            }

            bitmap.UnlockBits(bmpData);
            ColorImage image = new ColorImage(bitmap);

            return(image);
        }
Exemple #2
0
        unsafe public static Frame ReadFrame(Stream stream)
        {
            OniFrame *frameHandle = (OniFrame *)IntPtr.Zero;
            OniStatus status      = oniStreamReadFrame(stream.Handle, &frameHandle);

            HandleError(status);

            return(new Frame((IntPtr)frameHandle));
        }
Exemple #3
0
        unsafe public static FloatImage FrameToFloatImage(Frame frame)
        {
            OniFrame * frameHandle = (OniFrame *)frame.Handle;
            int        width       = (*frameHandle).width;
            int        height      = (*frameHandle).height;
            FloatImage img         = new FloatImage(width, height);

            short *source = (short *)(*frameHandle).data;

            for (int y = 0; y < height; y++)
            {
                short *sourceLine = source + y * width;
                for (int x = 0; x < width; x++)
                {
                    img[y, x] = (float)(*sourceLine++);
                }
            }

            return(img);
        }
Exemple #4
0
 private unsafe extern static void oniFrameRelease(OniFrame *pFrame);
Exemple #5
0
 private unsafe extern static void oniFrameAddRef(OniFrame *pFrame);
Exemple #6
0
 internal SensorFrame(OniFrame *pFrame)
 {
     _pFrame = pFrame;
     Data    = new FrameData((byte *)_pFrame->data, _pFrame->dataSize);
 }