Exemple #1
0
        public void UpdateBitmap(Bitmap image, CopyBitmapOptions options = CopyBitmapOptions.None)
        {
            if (image.Width != FrameSize.Width || image.Height != FrameSize.Height)
            {
                throw new ArgumentException("Bitmap size if not acceptable.");
            }

            if (image.PixelFormat == PixelFormat.Format24bppRgb)
            {
                options |= CopyBitmapOptions.Force24BitRgb;
            }
            else if ((options & CopyBitmapOptions.Force24BitRgb) == CopyBitmapOptions.Force24BitRgb)
            {
                throw new ArgumentException("Requested RGB888 operation on a non-RGB24 bitmap.");
            }

            PixelFormat desiredFormat;

            switch (VideoMode.DataPixelFormat)
            {
            case VideoMode.PixelFormat.Rgb888:
                desiredFormat = PixelFormat.Format24bppRgb;

                break;

            case VideoMode.PixelFormat.Gray8:
                desiredFormat = PixelFormat.Format8bppIndexed;

                break;

            case VideoMode.PixelFormat.Depth1Mm:
            case VideoMode.PixelFormat.Depth100Um:
            case VideoMode.PixelFormat.Gray16:
                desiredFormat = PixelFormat.Format16bppGrayScale;

                break;

            default:

                throw new InvalidOperationException("Pixel format is not acceptable for bitmap converting.");
            }

            if ((options & CopyBitmapOptions.Force24BitRgb) != CopyBitmapOptions.Force24BitRgb &&
                desiredFormat != image.PixelFormat)
            {
                throw new ArgumentException("Requested bitmap pixel format is not suitable for this data.");
            }

            var destBits = image.LockBits(
                new Rectangle(new Point(0, 0), image.Size),
                ImageLockMode.WriteOnly,
                image.PixelFormat);

            VideoFrameRef_copyDataTo(Handle, destBits.Scan0, destBits.Stride, options);
            image.UnlockBits(destBits);
        }
Exemple #2
0
        public Bitmap ToBitmap(CopyBitmapOptions options = CopyBitmapOptions.None)
        {
            PixelFormat format;

            switch (VideoMode.DataPixelFormat)
            {
            case VideoMode.PixelFormat.Rgb888:
                format = PixelFormat.Format24bppRgb;

                break;

            case VideoMode.PixelFormat.Gray8:
                format = PixelFormat.Format8bppIndexed;

                break;

            case VideoMode.PixelFormat.Depth1Mm:
            case VideoMode.PixelFormat.Depth100Um:
            case VideoMode.PixelFormat.Gray16:
                format = PixelFormat.Format16bppGrayScale;

                break;

            default:

                throw new InvalidOperationException("Pixel format is not acceptable for bitmap converting.");
            }

            if ((options & CopyBitmapOptions.Force24BitRgb) == CopyBitmapOptions.Force24BitRgb)
            {
                format = PixelFormat.Format24bppRgb;
            }

            var destination = new Bitmap(FrameSize.Width, FrameSize.Height, format);

            if (format == PixelFormat.Format8bppIndexed)
            {
                for (var i = 0; i < 256; i++)
                {
                    destination.Palette.Entries[i] = Color.FromArgb(i, i, i);
                }
            }

            UpdateBitmap(destination, options);

            return(destination);
        }
 private static extern void VideoFrameRef_copyDataTo(
     IntPtr objectHandler, 
     IntPtr dstData, 
     int dstStride, 
     CopyBitmapOptions options);
        public void UpdateBitmap(Bitmap image, CopyBitmapOptions options = CopyBitmapOptions.None)
        {
            if (image.Width != this.FrameSize.Width || image.Height != this.FrameSize.Height)
            {
                throw new ArgumentException("Bitmap size if not acceptable.");
            }

            if (image.PixelFormat == PixelFormat.Format24bppRgb)
            {
                options |= CopyBitmapOptions.Force24BitRgb;
            }
            else if ((options & CopyBitmapOptions.Force24BitRgb) == CopyBitmapOptions.Force24BitRgb)
            {
                throw new ArgumentException("Requested RGB888 operation on a non-RGB24 bitmap.");
            }

            PixelFormat desiredFormat;
            switch (this.VideoMode.DataPixelFormat)
            {
                case VideoMode.PixelFormat.Rgb888:
                    desiredFormat = PixelFormat.Format24bppRgb;
                    break;
                case VideoMode.PixelFormat.Gray8:
                    desiredFormat = PixelFormat.Format8bppIndexed;
                    break;
                case VideoMode.PixelFormat.Depth1Mm:
                case VideoMode.PixelFormat.Depth100Um:
                case VideoMode.PixelFormat.Gray16:
                    desiredFormat = PixelFormat.Format16bppGrayScale;
                    break;
                default:
                    throw new InvalidOperationException("Pixel format is not acceptable for bitmap converting.");
            }

            if ((options & CopyBitmapOptions.Force24BitRgb) != CopyBitmapOptions.Force24BitRgb
                && desiredFormat != image.PixelFormat)
            {
                throw new ArgumentException("Requested bitmap pixel format is not suitable for this data.");
            }

            BitmapData destBits = image.LockBits(
                new Rectangle(new Point(0, 0), image.Size), 
                ImageLockMode.WriteOnly, 
                image.PixelFormat);
            VideoFrameRef_copyDataTo(this.Handle, destBits.Scan0, destBits.Stride, options);
            image.UnlockBits(destBits);
        }
        public Bitmap ToBitmap(CopyBitmapOptions options = CopyBitmapOptions.None)
        {
            PixelFormat format;
            switch (this.VideoMode.DataPixelFormat)
            {
                case VideoMode.PixelFormat.Rgb888:
                    format = PixelFormat.Format24bppRgb;
                    break;
                case VideoMode.PixelFormat.Gray8:
                    format = PixelFormat.Format8bppIndexed;
                    break;
                case VideoMode.PixelFormat.Depth1Mm:
                case VideoMode.PixelFormat.Depth100Um:
                case VideoMode.PixelFormat.Gray16:
                    format = PixelFormat.Format16bppGrayScale;
                    break;
                default:
                    throw new InvalidOperationException("Pixel format is not acceptable for bitmap converting.");
            }

            if ((options & CopyBitmapOptions.Force24BitRgb) == CopyBitmapOptions.Force24BitRgb)
            {
                format = PixelFormat.Format24bppRgb;
            }

            Bitmap destination = new Bitmap(this.FrameSize.Width, this.FrameSize.Height, format);
            if (format == PixelFormat.Format8bppIndexed)
            {
                for (int i = 0; i < 256; i++)
                {
                    destination.Palette.Entries[i] = Color.FromArgb(i, i, i);
                }
            }

            this.UpdateBitmap(destination, options);
            return destination;
        }
Exemple #6
0
 private static extern void VideoFrameRef_copyDataTo(
     IntPtr objectHandler,
     IntPtr dstData,
     int dstStride,
     CopyBitmapOptions options);