Esempio n. 1
0
        private static Image FromBlocks(ImageBlocks imageBlocks)
        {
            var image = new Image(imageBlocks.Width, imageBlocks.Height);

            foreach (Block block in imageBlocks.Blocks)
            {
                switch (block.Type)
                {
                case BlockType.Y:
                    image.X.SetSubMatrix(block.Position.x, block.Position.y, block.Values);
                    break;

                case BlockType.U:
                    image.Y.SetSubMatrix(block.Position.x, block.Position.y, block.Values, 2);
                    break;

                case BlockType.V:
                    image.Z.SetSubMatrix(block.Position.x, block.Position.y, block.Values, 2);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(image);
        }
Esempio n. 2
0
        public Image Decode(ImageBlocks imageBlocks)
        {
            Image image = FromBlocks(imageBlocks);

            YUVToRGB(image);

            return(image);
        }
Esempio n. 3
0
        private static void Main(string[] args)
        {
            Image       image       = PPM.ReadImage("nt-P6.ppm") !;
            var         encoder     = new Encoder();
            var         decoder     = new Decoder();
            ImageBlocks imageBlocks = encoder.Encode(image);
            Image       decoded     = decoder.Decode(imageBlocks);

            PPM.WriteImage("output.ppm", decoded);
        }
Esempio n. 4
0
        private static ImageBlocks ToBlocks(Image image)
        {
            var imageBlocks = new ImageBlocks(image.Width, image.Height);

            for (var i = 0; i < image.Width; i += Block.Size)
            {
                for (var j = 0; j < image.Height; j += Block.Size)
                {
                    FlatMatrix <int> y = image.X.GetSubMatrix(i, j, Block.Size, Block.Size);
                    FlatMatrix <int> u = image.X.GetSubMatrix(i, j, Block.Size, Block.Size, 2);
                    FlatMatrix <int> v = image.X.GetSubMatrix(i, j, Block.Size, Block.Size, 2);

                    var yBlock = new Block
                    {
                        Position = (i, j),
                        Type     = BlockType.Y,
                        Values   = y
                    };

                    var uBlock = new Block
                    {
                        Position = (i, j),
                        Type     = BlockType.U,
                        Values   = u
                    };

                    var vBlock = new Block
                    {
                        Position = (i, j),
                        Type     = BlockType.V,
                        Values   = v
                    };

                    imageBlocks.Blocks.Add(yBlock);
                    imageBlocks.Blocks.Add(uBlock);
                    imageBlocks.Blocks.Add(vBlock);
                }
            }

            return(imageBlocks);
        }
    }
}