public static Bitmap EmbedImage(string visibleImageFilename, string hiddenImageFilename)
        {
            Bitmap visibleImage = new Bitmap(visibleImageFilename);
            Bitmap hiddenImage  = new Bitmap(hiddenImageFilename);

            // TODO: don't need to resize to a half if hidden image is less than a half
            hiddenImage = ImageResizer.CropAndResizeBitmap(visibleImage.Size, hiddenImage, 0.5);
            Bitmap stegImage = new Bitmap(visibleImage.Width, visibleImage.Height);

            PixelMapper pixelMapper = new PixelMapper(visibleImage.Size, hiddenImage.Size);

            foreach (PixelMap pm in pixelMapper.GetHiddenToVisiblePixelMapEnumerator())
            {
                foreach (PixelBitsMap pbm in pm.VisibleImagePoints)
                {
                    BitArray r = copyChannel(visibleImage, hiddenImage, pm.HiddenImagePoint, pbm, Channel.R);
                    BitArray g = copyChannel(visibleImage, hiddenImage, pm.HiddenImagePoint, pbm, Channel.G);
                    BitArray b = copyChannel(visibleImage, hiddenImage, pm.HiddenImagePoint, pbm, Channel.B);

                    Color pixelColor = Color.FromArgb(r.ToInt(), g.ToInt(), b.ToInt());

                    stegImage.SetPixel(pbm.Point.X, pbm.Point.Y, pixelColor);
                }
            }

            return(stegImage);
        }
Example #2
0
        public void Snapshot_PostSnapshot_SnapshotShoudntChange()
        {
            int   width     = 200;
            int   height    = 200;
            int   viewportX = 30;
            int   viewportY = 30;
            float gameScale = 2.0f;

            IPixelMapper pixelMapper = new PixelMapper();

            pixelMapper.SetViewPortSize(width, height);
            pixelMapper.AdjustGameScale(gameScale);
            pixelMapper.SetViewPort(viewportX, viewportY);

            IPixelMapper actual = pixelMapper.Snapshot();

            pixelMapper.AdjustGameScale(0.5f);
            pixelMapper.SetViewPort(0, 0);

            Assert.Equal(-viewportX, actual.ViewPortX);
            Assert.Equal(-viewportY, actual.ViewPortY);
            Assert.Equal(gameScale, actual.GameScale);

            Assert.Equal(width, actual.ViewPortWidth);
            Assert.Equal(height, actual.ViewPortHeight);
        }
Example #3
0
        public void AdjustGameScale_DoubleZoomIn_CorrectViewportWorldPosition()
        {
            const int    ScreenSize  = 200;
            IPixelMapper pixelMapper = new PixelMapper();

            pixelMapper.SetViewPortSize(ScreenSize, ScreenSize);

            // Set the inital viewport to be at 100,100
            pixelMapper.SetViewPort(100, 100);
            pixelMapper.LogData(_output);

            Assert.Equal(100, -pixelMapper.ViewPortX);
            Assert.Equal(100, -pixelMapper.ViewPortY);

            pixelMapper.AdjustGameScale(2f);
            pixelMapper.LogData(_output);

            Assert.Equal(300, -pixelMapper.ViewPortX);
            Assert.Equal(300, -pixelMapper.ViewPortY);

            pixelMapper.AdjustGameScale(2f);
            pixelMapper.LogData(_output);

            Assert.Equal(700, -pixelMapper.ViewPortX);
            Assert.Equal(700, -pixelMapper.ViewPortY);
        }
Example #4
0
        public void Snapshot_NoChanges()
        {
            IPixelMapper pixelMapper = new PixelMapper();

            IPixelMapper actual = pixelMapper.Snapshot();

            AssertSnapshotsSame(pixelMapper, actual);
        }
Example #5
0
        public void Snapshot_CompareTwoSnapshotsFromSameMapper()
        {
            IPixelMapper pixelMapper = new PixelMapper();

            IPixelMapper expected = pixelMapper.Snapshot();
            IPixelMapper actual   = pixelMapper.Snapshot();

            AssertSnapshotsSame(expected, actual);
        }
Example #6
0
        public void AdjustGameScale_CantZoomToZero()
        {
            const int    ScreenSize  = 200;
            IPixelMapper pixelMapper = new PixelMapper();

            pixelMapper.SetViewPortSize(ScreenSize, ScreenSize);

            pixelMapper.AdjustGameScale(0.0f);
            pixelMapper.LogData(_output);

            Assert.Equal(1.0f, pixelMapper.GameScale);
        }
        public void MapPixels_ExpectedMapping(int width, int height, Corner zeroPixelCorner, bool vertical, bool alternateStride, byte[] expectedOutput)
        {
            var input = ExtendArray(new byte[] { 0, 1, 2, 3, 4, 5 });

            expectedOutput = ExtendArray(expectedOutput);
            var output = new byte[expectedOutput.Length];

            PixelMapper.MapPixels(width, height, zeroPixelCorner, vertical, alternateStride, input, output);

            for (int i = 0; i < expectedOutput.Length; i++)
            {
                Assert.True(expectedOutput[i] == output[i], $"Expected: [{string.Join(", ", expectedOutput)}] Actual: [{string.Join(", ", output)}]");
            }
        }
Example #8
0
        public void Snapshot_FullySetup()
        {
            int width     = 200;
            int height    = 200;
            int viewportX = 30;
            int viewportY = 30;

            IPixelMapper pixelMapper = new PixelMapper();

            pixelMapper.SetViewPortSize(width, height);
            pixelMapper.SetViewPort(viewportX, viewportY);
            pixelMapper.AdjustGameScale(2f);

            IPixelMapper actual = pixelMapper.Snapshot();

            AssertSnapshotsSame(pixelMapper, actual);
        }
        public static Bitmap ExtractHiddenImage(string stegImageFilename)
        {
            Bitmap stegImage   = new Bitmap(stegImageFilename);
            Bitmap hiddenImage = new Bitmap(stegImage.Size.Width / 2, stegImage.Size.Height / 2);

            PixelMapper pixelMapper = new PixelMapper(stegImage.Size, hiddenImage.Size);

            foreach (PixelMap pm in pixelMapper.GetHiddenToVisiblePixelMapEnumerator())
            {
                BitArray r = extractChannel(stegImage, hiddenImage, pm, Channel.R);
                BitArray g = extractChannel(stegImage, hiddenImage, pm, Channel.G);
                BitArray b = extractChannel(stegImage, hiddenImage, pm, Channel.B);

                Color pixelColor = Color.FromArgb(r.ToInt(), g.ToInt(), b.ToInt());

                hiddenImage.SetPixel(pm.HiddenImagePoint.X, pm.HiddenImagePoint.Y, pixelColor);
            }

            return(hiddenImage);
        }
Example #10
0
        public void AdjustGameScale_SingleZoomOut_CorrectViewportWorldPosition()
        {
            const int    GameSize    = 100;
            const int    ScreenSize  = 200;
            IPixelMapper pixelMapper = new PixelMapper();

            pixelMapper.Initialize(GameSize, GameSize);
            pixelMapper.SetViewPortSize(ScreenSize, ScreenSize);

            // Set the inital viewport to be at 100,100
            pixelMapper.SetViewPort(100, 100);
            pixelMapper.LogData(_output);

            Assert.Equal(100, -pixelMapper.ViewPortX);
            Assert.Equal(100, -pixelMapper.ViewPortY);

            pixelMapper.AdjustGameScale(0.5f);
            pixelMapper.LogData(_output);

            Assert.Equal(0, -pixelMapper.ViewPortX);
            Assert.Equal(0, -pixelMapper.ViewPortY);
        }