Ejemplo n.º 1
0
        public static Vector <int>[,] Load(DctParameters parameters)
        {
            using (var fileStream = File.Open(parameters.SavePath, FileMode.Open))
                using (var decodeStream = new LzmaDecodeStream(fileStream))
                    using (var reader = new BinaryReader(decodeStream))
                    {
                        parameters.DecimationType   = (DecimationType)reader.ReadByte();
                        parameters.QuantizationType = (QuantizationType)reader.ReadByte();
                        switch (parameters.QuantizationType)
                        {
                        case QuantizationType.LargestN:
                            parameters.Ny = reader.ReadInt32();
                            parameters.Nc = reader.ReadInt32();
                            break;

                        case QuantizationType.QuantizationMatrix:
                            var a = reader.ReadInt32();
                            var b = reader.ReadInt32();
                            var c = reader.ReadInt32();
                            var d = reader.ReadInt32();
                            parameters.GeneratorsY = new MatrixGenerators
                            {
                                Alpha = a,
                                Gamma = b,
                            };
                            parameters.GeneratorsC = new MatrixGenerators
                            {
                                Alpha = c,
                                Gamma = d,
                            };
                            break;

                        case QuantizationType.DefaultJpegMatrix:
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                        var n = reader.ReadInt32();
                        var m = reader.ReadInt32();

                        var result = new Vector <int> [n, m];
                        for (var i = 0; i < n; ++i)
                        {
                            for (var j = 0; j < m; ++j)
                            {
                                var a = reader.ReadInt32();
                                var b = reader.ReadInt32();
                                var c = reader.ReadInt32();
                                result[i, j] = new Vector <int>(new [] { a, b, c });
                            }
                        }
                        return(result);
                    }
        }
Ejemplo n.º 2
0
        public void Setup()
        {
            originalBitmap  = new Bitmap(resourcesPath + "c_corgi.jpg");
            watermarkBitmap = new Bitmap(resourcesPath + "w_tekst_dolny.png");

            expectedDctBitmap            = new Bitmap(myResourcesPath + "original_cosine_test.png");
            expectedDctWatermarkedBitmap = new Bitmap(myResourcesPath + "cosine_watermarked_test.png");
            expectedWatermarkedBitmap    = new Bitmap(myResourcesPath + "dct_watermarked_test.png");

            key        = 10;
            alpha      = 0.01M;
            parameters = new DctParameters(originalBitmap.TransformToEffectiveBitmap(), watermarkBitmap.TransformToEffectiveBitmap(), null, key, alpha);

            algorithm = new Dct(parameters);
        }
Ejemplo n.º 3
0
        public static void Save(Vector <int>[,] data, DctParameters parameters)
        {
            using (var fileStream = File.Open(parameters.SavePath, FileMode.Create))
                using (var encodeStream = new LzmaEncodeStream(fileStream))
                    using (var writer = new BinaryWriter(encodeStream))
                    {
                        writer.Write((byte)parameters.DecimationType);
                        writer.Write((byte)parameters.QuantizationType);
                        switch (parameters.QuantizationType)
                        {
                        case QuantizationType.LargestN:
                            writer.Write(parameters.Ny.Value);
                            writer.Write(parameters.Nc.Value);
                            break;

                        case QuantizationType.QuantizationMatrix:
                            writer.Write(parameters.GeneratorsY.Alpha);
                            writer.Write(parameters.GeneratorsY.Gamma);
                            writer.Write(parameters.GeneratorsC.Alpha);
                            writer.Write(parameters.GeneratorsC.Gamma);
                            break;

                        case QuantizationType.DefaultJpegMatrix:
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                        var n = data.GetLength(0);
                        var m = data.GetLength(1);
                        writer.Write(n);
                        writer.Write(m);
                        for (var i = 0; i < n; ++i)
                        {
                            for (var j = 0; j < m; ++j)
                            {
                                for (var k = 0; k < 3; ++k)
                                {
                                    writer.Write(data[i, j][k]);
                                }
                            }
                        }
                    }
        }
Ejemplo n.º 4
0
        private bool ValidateDct(out string errorMessage, out DctParameters dctParameters)
        {
            dctParameters = new DctParameters
            {
                DecimationType   = (DecimationType)ComboBox_Decimation.SelectedIndex,
                QuantizationType = (QuantizationType)ComboBox_Quantization.SelectedIndex,
                SavePath         = JPG_SavePath.Text,
            };
            switch (dctParameters.QuantizationType)
            {
            case QuantizationType.LargestN:
                int ny, nc;
                if (!int.TryParse(JPG_FirstParameter.Text, out ny) || ny < 1 || ny > 64)
                {
                    errorMessage = "N_Y must be integer in [1, 64]";
                    return(false);
                }
                if (!int.TryParse(JPG_SecondParameter.Text, out nc) || nc < 1 || nc > 64)
                {
                    errorMessage = "N_C must be integer in [1, 64]";
                    return(false);
                }
                dctParameters.Ny = ny;
                dctParameters.Nc = nc;
                break;

            case QuantizationType.QuantizationMatrix:
                int alphaY, alphaC, gammaY, gammaC;
                if (!int.TryParse(JPG_FirstParameter.Text, out alphaY))
                {
                    errorMessage = "\u03B1_Y must be integer";
                    return(false);
                }
                if (!int.TryParse(JPG_SecondParameter.Text, out gammaY))
                {
                    errorMessage = "\u0263_Y must be integer";
                    return(false);
                }
                if (!int.TryParse(JPG_ThirdParameter.Text, out alphaC))
                {
                    errorMessage = "\u03B1_C must be integer";
                    return(false);
                }
                if (!int.TryParse(JPG_FourthParameter.Text, out gammaC))
                {
                    errorMessage = "\u0263_C must be integer";
                    return(false);
                }
                dctParameters.GeneratorsY = new MatrixGenerators
                {
                    Alpha = alphaY,
                    Gamma = gammaY,
                };
                dctParameters.GeneratorsC = new MatrixGenerators
                {
                    Alpha = alphaC,
                    Gamma = gammaC,
                };
                break;

            case QuantizationType.DefaultJpegMatrix:
                break;

            default:
                throw new Exception("Invalid program state");
            }
            errorMessage = string.Empty;
            return(true);
        }