public override Bitmap RecoverWatermark(Bitmap watermarkedImage)
        {
            var watermarkedData  = ImageUtility.ConvertToMatrix(watermarkedImage);
            var watermarkData    = new int[_watermark.Width, _watermark.Height];
            var watermarkChannel = new int[_watermark.Width * _watermark.Height];

            RecoverChannel(watermarkedData.G, watermarkChannel);

            int k = 0;

            for (int i = 0; i < watermarkData.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < watermarkData.GetUpperBound(1) + 1; j++)
                {
                    watermarkData[i, j] = watermarkChannel[k++];
                }
            }

            var recoveredWatermark = ImageUtility.ConverBinaryArrayToWatermark2(watermarkData);

            return(recoveredWatermark);
        }
        private void BtnRecoveredWatermarkSave_Click(object sender, EventArgs e)
        {
            //if (_recoveredWatermark == null)
            //    return;
            SaveFileDialog dialog = new SaveFileDialog();

            dialog.Filter       = "JPEG|*.jpg|PNG|*.png;|BMP|*.bmp;|GIF|*.gif;|TIFF|*.tiff";
            dialog.AddExtension = true;
            String destinationPath = null;

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                destinationPath = dialog.FileName;
                try
                {
                    _recoveredWatermark.Save(destinationPath, ImageUtility.GetImageFormat(destinationPath));
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message);
                }
            }
        }
        public override Bitmap EmbedWatermark(Bitmap coverImage, Bitmap watermark)
        {
            var coverData     = ImageUtility.ConvertToMatrix(coverImage);
            var watermarkData = ImageUtility.ConvertWatermarkToBinaryArray2(watermark);

            var watermarkChannel = new int[watermarkData.Length];
            int k = 0;

            for (int i = 0; i < watermarkData.GetUpperBound(0) + 1; i++)
            {
                for (int j = 0; j < watermarkData.GetUpperBound(1) + 1; j++)
                {
                    watermarkChannel[k++] = watermarkData[i, j];
                }
            }

            EmbedChannel(coverData.G, watermarkChannel);

            SetInformData(watermark);
            var watermarkedImage = ImageUtility.ConvertToBitmap(coverData);

            return(watermarkedImage);
        }