Beispiel #1
0
        public override Bitmap Frame(int frameNum)
        {
            var input = new byte[FrameLength];

            File.Seek(frameNum * FrameLength, SeekOrigin.Begin);
            File.Read(input, 0, FrameLength);

            var output = new byte[Square * 3];

            for (var i = 0; i < Height; i++)
            {
                var offsetY    = i * Width;
                var offsetU    = Square + (i / 2) * (Width / 2);
                var offsetV    = Square * 5 / 4 + (i / 2) * (Width / 2);
                var halfoffset = 3 * i * Width;
                for (var j = 0; j < Width; j++)
                {
                    var pixel = new YUVPixel(
                        input[offsetY + j],
                        input[offsetU + j / 2],
                        input[offsetV + j / 2]
                        );
                    var offset = halfoffset + 3 * j;
                    output[offset + 0] = pixel.B;
                    output[offset + 1] = pixel.G;
                    output[offset + 2] = pixel.R;
                }
            }

            var bmp     = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
            var bmpData = bmp.LockBits(
                new Rectangle(0, 0, bmp.Width, bmp.Height),
                ImageLockMode.WriteOnly, bmp.PixelFormat);

            Marshal.Copy(output, 0, bmpData.Scan0, output.Length);
            bmp.UnlockBits(bmpData);
            return(bmp);
        }
Beispiel #2
0
        public override Bitmap Frame(int frameNum)
        {
            var input = new byte[FrameLength];
            File.Seek(frameNum * FrameLength, SeekOrigin.Begin);
            File.Read(input, 0, FrameLength);

            var output = new byte[Square * 3];

            for (var i = 0; i < Height; i++)
            {
                var offsetY = i * Width;
                var offsetU = Square + (i / 2) * (Width / 2);
                var offsetV = Square * 5 / 4 + (i / 2) * (Width / 2);
                var halfoffset = 3 * i * Width;
                for (var j = 0; j < Width; j++)
                {
                    var pixel = new YUVPixel(
                        input[offsetY + j],
                        input[offsetU + j / 2],
                        input[offsetV + j / 2]
                        );
                    var offset = halfoffset + 3 * j;
                    output[offset + 0] = pixel.B;
                    output[offset + 1] = pixel.G;
                    output[offset + 2] = pixel.R;
                }
            }

            var bmp = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
            var bmpData = bmp.LockBits(
                     new Rectangle(0, 0, bmp.Width, bmp.Height),
                     ImageLockMode.WriteOnly, bmp.PixelFormat);
            Marshal.Copy(output, 0, bmpData.Scan0, output.Length);
            bmp.UnlockBits(bmpData);
            return bmp;
        }