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