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); } }
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); }
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]); } } } } }
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); }