Пример #1
0
        public override Bitmap RecoverWatermark(Bitmap watermarkedImage)
        {
            var coverData       = ImageUtility.ConvertToMatrix(_coverImage);
            var watermarkData   = ImageUtility.ConvertToMatrix(_watermark);
            var watermarkedData = ImageUtility.ConvertToMatrix(watermarkedImage);

            Action red   = () => RecoverChannel(coverData.R, watermarkedData.R, watermarkData.R);
            Action green = () => RecoverChannel(coverData.G, watermarkedData.G, watermarkData.G);
            Action blue  = () => RecoverChannel(coverData.B, watermarkedData.B, watermarkData.B);

            Parallel.Invoke(red, green, blue);

            var avgGray = new double[watermarkData.Width, watermarkData.Height];

            for (int i = 0; i < watermarkData.Width; i++)
            {
                for (int j = 0; j < watermarkData.Height; j++)
                {
                    avgGray[i, j] = (1 * watermarkData.R[i, j] + 1 * watermarkData.G[i, j] + 1 * watermarkData.B[i, j]) / 3;
                }
            }
            watermarkData = new RgbData(avgGray);

            var recoveredWatermark = ImageUtility.ConvertToBitmap(watermarkData);

            return(recoveredWatermark);
        }
Пример #2
0
        public override Bitmap EmbedWatermark(Bitmap coverImage, Bitmap watermarkImage)
        {
            var coverData     = ImageUtility.ConvertToMatrix(coverImage);
            var watermarkData = ImageUtility.ConvertToMatrix(watermarkImage);

            Action red   = () => EmbedChannel(coverData.R, watermarkData.R);
            Action green = () => EmbedChannel(coverData.G, watermarkData.G);
            Action blue  = () => EmbedChannel(coverData.B, watermarkData.B);

            Parallel.Invoke(red, green, blue);

            var watermarkedImage = ImageUtility.ConvertToBitmap(coverData);

            SetInformData(coverImage, watermarkImage);
            return(watermarkedImage);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }