OnNewFrame() private method

Notifies clients about new frame.
private OnNewFrame ( Bitmap image ) : void
image Bitmap New frame's image.
return void
Ejemplo n.º 1
0
 public unsafe int BufferCB(double sampleTime, IntPtr buffer, int bufferLen)
 {
     if (parent.NewFrame != null)
     {
         Bitmap     bitmap     = new Bitmap(width, height, PixelFormat.Format24bppRgb);
         BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
         int        stride     = bitmapData.Stride;
         int        stride2    = bitmapData.Stride;
         byte *     ptr        = (byte *)bitmapData.Scan0.ToPointer() + (long)stride2 * (long)(height - 1);
         byte *     ptr2       = (byte *)buffer.ToPointer();
         for (int i = 0; i < height; i++)
         {
             Win32.memcpy(ptr, ptr2, stride);
             ptr  -= stride2;
             ptr2 += stride;
         }
         bitmap.UnlockBits(bitmapData);
         if (snapshotMode)
         {
             parent.OnSnapshotFrame(bitmap);
         }
         else
         {
             parent.OnNewFrame(bitmap);
         }
         bitmap.Dispose();
     }
     return(0);
 }
Ejemplo n.º 2
0
            // Callback method that receives a pointer to the sample buffer
            public int BufferCB(double sampleTime, IntPtr buffer, int bufferLen)
            {
                if (parent.NewFrame != null)
                {
                    // create new image
                    System.Drawing.Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);

                    // lock bitmap data
                    BitmapData imageData = image.LockBits(
                        new Rectangle(0, 0, width, height),
                        ImageLockMode.ReadWrite,
                        PixelFormat.Format24bppRgb);

                    // copy image data
                    int srcStride = imageData.Stride;
                    int dstStride = imageData.Stride;

                    int dst = imageData.Scan0.ToInt32( ) + dstStride * (height - 1);
                    int src = buffer.ToInt32( );

                    for (int y = 0; y < height; y++)
                    {
                        Win32.memcpy(dst, src, srcStride);
                        dst -= dstStride;
                        src += srcStride;
                    }

                    // unlock bitmap data
                    image.UnlockBits(imageData);

                    // notify parent
                    parent.OnNewFrame(image);

                    // release the image
                    image.Dispose( );
                }

                return(0);
            }
Ejemplo n.º 3
0
            // Callback method that receives a pointer to the sample buffer
            public int BufferCB(double sampleTime, IntPtr pBuffer, int bufferLen)
            {
                FrameCount++;

                if (FrameCount % 3 == 0)
                {
                    // create new image
                    System.Drawing.Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);

                    // lock bitmap data
                    BitmapData imageData = image.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                    // copy image data / convert from YUY2 to RGB24 if needed
                    if (YUYV)
                    {
                        int    l, c;
                        int    r, g, b, cr, cg, cb, y2;
                        int    r0, b0, r1, b1, y0, u, y1, v;
                        double g0, g1;

                        l = height;
                        unsafe
                        {
                            byte *dst = (byte *)imageData.Scan0.ToPointer();
                            byte *src = (byte *)pBuffer.ToPointer();
                            while (l-- > 0)
                            {
                                c = width >> 1;
                                while (c-- > 0)
                                {
                                    if (!grayscale)
                                    {
                                        y1 = *src++;
                                        cb = ((*src - 128) * 454) >> 8;
                                        cg = (*src++ - 128) * 88;
                                        y2 = *src++;
                                        cr = ((*src - 128) * 359) >> 8;
                                        cg = (cg + (*src++ - 128) * 183) >> 8;

                                        r = y1 + cr;
                                        b = y1 + cb;
                                        g = y1 - cg;

                                        *dst++ = (byte)b;
                                        *dst++ = (byte)g;
                                        *dst++ = (byte)r;

                                        r = y2 + cr;
                                        b = y2 + cb;
                                        g = y2 - cg;

                                        *dst++ = (byte)b;
                                        *dst++ = (byte)g;
                                        *dst++ = (byte)r;
                                    }

                                    else if (grayscale)
                                    {
                                        y0 = *src++;
                                        u  = *src++;
                                        y1 = *src++;
                                        v  = *src++;

                                        //r0 = y0 + v - 128;
                                        //b0 = y0 + u - 128;
                                        //g0 = (y0 - .2125 * r0 - .0721 * b0) / .7514;
                                        //r1 = y1 + v - 128;
                                        //b1 = y1 + u - 128;
                                        //g1 = (y1 - .2125 * r1 - .0721 * b1) / .7514;
                                        r0 = y0;
                                        b0 = y0;
                                        g0 = y0;

                                        r1 = y1;
                                        b1 = y1;
                                        g1 = y1;

                                        *dst++ = (byte)b0;
                                        *dst++ = (byte)g0;
                                        *dst++ = (byte)r0;

                                        *dst++ = (byte)b1;
                                        *dst++ = (byte)g1;
                                        *dst++ = (byte)r1;
                                    }
                                }
                            }
                        }
                    }

                    else if (!YUYV)
                    {
                        // copy image data
                        int srcStride = imageData.Stride;
                        int dstStride = imageData.Stride;

                        unsafe
                        {
                            byte *dst = (byte *)imageData.Scan0.ToPointer() + dstStride * (height - 1);
                            byte *src = (byte *)pBuffer.ToPointer();

                            for (int y = 0; y < height; y++)
                            {
                                for (int x = 0; x < srcStride; x++)
                                {
                                    *dst++ = *src++;
                                }
                                dst -= 2 * dstStride;
                            }
                        }
                    }
                    // unlock bitmap data
                    image.UnlockBits(imageData);

                    // notify parent
                    if (erode)
                    {
                        Bitmap ErodedImage = erosionFilter.Apply(image);
                        parent.OnNewFrame(ErodedImage);
                        ErodedImage.Dispose();
                        image.Dispose();
                    }
                    else if (!erode)
                    {
                        parent.OnNewFrame(image);
                        // release the image
                        image.Dispose();
                    }
                }
                if (FrameCount == 30)
                {
                    FrameCount = 0;
                }
                return(0);
            }