Example #1
0
        public void CheckIfCanHideMessageOrThrow(VideoFile containerVideoFile, byte[] messageToHide)
        {
            var bitsFromMessageToSave = TextUtils.GetMessageBitArray(messageToHide);

            var videoCapacity = containerVideoFile.FrameCount * containerVideoFile.FrameHeight * containerVideoFile.FrameWidth * 3;

            if (bitsFromMessageToSave.Length > videoCapacity)
                throw new Exception("Wiadomość jest zbyt długa aby umieścić ją w pliku .avi" + Environment.NewLine +
                                    "Długość wiadomości w bajtach: " + bitsFromMessageToSave.Length + Environment.NewLine +
                                    "Ilośc dostępnego miejsca w pliku wideo: " + videoCapacity);
        }
Example #2
0
        public VideoFile OpenReadVideoDialog(Type dialogType)
        {
            var dlg = new OpenFileDialog
            {
                DefaultExt = dialogType.defaultExt,
                Filter = dialogType.filter
            };

            dlg.ShowDialog();

            if (dlg.FileName == "")
            {
                throw new ArgumentException();
            }

            _aviFileReading.Open(dlg.FileName);

            var videoFile = new VideoFile(dlg.FileName)
            {
                FrameHeight = _aviFileReading.Bih.biHeight,
                FrameWidth = _aviFileReading.Bih.biWidth,
                FrameCount = _aviFileReading.CountFrames,
                FrameRate = _aviFileReading.FrameRate
            };

            _aviFileReading.Close();

            return videoFile;
        }
Example #3
0
        public VideoFile CreateHiddenMessage(VideoFile containerVideoFile, byte[] messageToHide)
        {
            _aviCodingValidator.CheckIfCanHideMessageOrThrow(containerVideoFile, messageToHide);

            var singleFrameBitsCapacity = containerVideoFile.FrameHeight * containerVideoFile.FrameWidth * bitsForPixel;

            var bitsFromMessageToSave = TextUtils.GetMessageBitArray(messageToHide);

            var framesNeededToHideMessage = bitsFromMessageToSave.Length.DivideRoundingUp(singleFrameBitsCapacity);

            var bitmapsFromOriginalVideo = new List<Bitmap>();

            _aviFileReading.Open(containerVideoFile.FileName);

            for (int i = 0; i < containerVideoFile.FrameCount; i++)
            {
                var frameFromOriginalVideo = _aviFileReading.ExportBitmapFromFrameNumber(i);
                bitmapsFromOriginalVideo.Add(frameFromOriginalVideo);
            }

            _aviFileReading.Close();

            FileInfo hiddenMessageFile = new FileInfo(containerVideoFile.FileName);

            var pathToCopyHiddenFile = hiddenMessageFile.DirectoryName + "\\" + hiddenMessageFile.Name.Insert(hiddenMessageFile.Name.Length - 4, "_zakodowane");

            hiddenMessageFile.CopyTo(pathToCopyHiddenFile, true);

            _aviFileWriting.Open(pathToCopyHiddenFile, containerVideoFile.FrameRate);

            var additionalBits = bitsFromMessageToSave.Length % bitsForPixel;
            var pixelsToEdit = bitsFromMessageToSave.Length / bitsForPixel;
            var pixelsEdited = 0;

            for (int i = 0; i < framesNeededToHideMessage; i++)
            {
                if (pixelsEdited >= pixelsToEdit)
                    break;

                var bitmapToChange = bitmapsFromOriginalVideo[i];

                for (int j = 0; j < bitmapToChange.Height; j++)
                {
                    if (pixelsEdited >= pixelsToEdit)
                        break;

                    for (int k = 0; k < bitmapToChange.Width; k++)
                    {
                        if (pixelsEdited < pixelsToEdit)
                        {

                            var pixelColor = bitmapToChange.GetPixel(k, j);

                            var pixelColorAfterHidingBits = pixelColor.ReplaceColorPixel(
                                bitsFromMessageToSave.Get(0 + pixelsEdited*bitsForPixel),   //RED
                                bitsFromMessageToSave.Get(1 + pixelsEdited*bitsForPixel),   //GREEN
                                bitsFromMessageToSave.Get(2 + pixelsEdited*bitsForPixel));  //BLUE

                            bitmapToChange.SetPixel(k, j, pixelColorAfterHidingBits);

                            pixelsEdited++;
                        }
                        else
                        {
                            if (additionalBits == 1)
                            {
                                var pixelColor = bitmapToChange.GetPixel(k, j);
                                var pixelColorAfterChangingOneBit =
                                    pixelColor.Replace1ColorBit(bitsFromMessageToSave.Get(bitsFromMessageToSave.Length - 1));

                                bitmapToChange.SetPixel(j, i, pixelColorAfterChangingOneBit);

                                break;
                            }
                            if (additionalBits == 2)
                            {
                                var pixelColor = bitmapToChange.GetPixel(k, j);
                                var pixelColorAfterChangingTwoBits =
                                    pixelColor.Replace2ColorBits(bitsFromMessageToSave.Get(bitsFromMessageToSave.Length - 2), bitsFromMessageToSave.Get(bitsFromMessageToSave.Length - 1));

                                bitmapToChange.SetPixel(k, j, pixelColorAfterChangingTwoBits);
                            }
                        }
                    }
                }

                _aviFileWriting.AddFrame(bitmapToChange);
            }

            //Add the rest of the frames
            for (int i = framesNeededToHideMessage; i < containerVideoFile.FrameCount; i++)
            {
                _aviFileWriting.AddFrame(bitmapsFromOriginalVideo[i]);
            }

            _aviFileWriting.Close();

            _aviFileReading.Open(pathToCopyHiddenFile);

            var videoFileWithHiddenData = new VideoFile(pathToCopyHiddenFile)
            {
                FrameHeight = _aviFileReading.Bih.biHeight,
                FrameWidth = _aviFileReading.Bih.biWidth,
                FrameCount = _aviFileReading.CountFrames,
                FrameRate = _aviFileReading.FrameRate
            };

            _aviFileReading.Close();

            return videoFileWithHiddenData;
        }
Example #4
0
        public VideoFile DecodeHiddenMessage(VideoFile containerVideoFile)
        {
            var messageBits = new BitArray(containerVideoFile.FrameCount * containerVideoFile.FrameWidth * containerVideoFile.FrameHeight * bitsForPixel);

            var bitInputNumber = 0;

            _aviFileReading.Open(containerVideoFile.FileName);

            for (int p = 0; p < containerVideoFile.FrameCount; p++)
            {
                var frameFromOriginalVideo = _aviFileReading.ExportBitmapFromFrameNumber(p);

                for (int i = 0; i < containerVideoFile.FrameHeight; i++)
                {
                    for (int j = 0; j < containerVideoFile.FrameWidth; j++)
                    {
                        var pixelColor = frameFromOriginalVideo.GetPixel(j, i);
                        messageBits.Set(bitInputNumber, IsOdd(pixelColor.R));
                        messageBits.Set(bitInputNumber + 1, IsOdd(pixelColor.G));
                        messageBits.Set(bitInputNumber + 2, IsOdd(pixelColor.B));

                        bitInputNumber += bitsForPixel;
                    }
                }
            }

            _aviFileReading.Close();

            var messageBytes = new byte[messageBits.Count];
            messageBits.CopyTo(messageBytes, 0);

            return new VideoFile(containerVideoFile.FileName)
            {
                hiddenMessageBytes = messageBytes
            };
        }
 public void Clear()
 {
     _hiddenMessageVideoFile = null;
     NotifyOfPropertyChange(() => HiddenMessage);
 }
 public HiddenMessageVideoViewModel(
     VideoFile hiddenMessageVideoFile)
 {
     _hiddenMessageVideoFile = hiddenMessageVideoFile;
 }