public Bitmap ToBitmap(List <int> bits, Bitmap image) { if (IsImageTooSmall(bits.Count, image)) { throw new ArgumentException("Image is too small!"); } // Bitmap newImage = new Bitmap(image.Width, image.Height); Bitmap newImage = new Bitmap(image); BitmapUtil.Iterate(image, bits, (point, diff) => { NumberColor numberColor = NumberColor.fromColor(image.GetPixel(point.X, point.Y)); if (numberColor.R <= 253) { numberColor.R += diff; } else if (numberColor.G <= 253) { numberColor.G += diff; } else if (numberColor.B <= 253) { numberColor.B += diff; } newImage.SetPixel(point.X, point.Y, numberColor.toColor()); }); return(newImage); }
public List <int> Parse(Bitmap bitmap, Bitmap basemap) { List <int> result = new List <int>(); if (bitmap.Width != basemap.Width || bitmap.Height != basemap.Height) { throw new ArgumentException("Invalid base image!"); } BitmapUtil.Iterate(bitmap, point => { NumberColor bitmapColor = NumberColor.fromColor(bitmap.GetPixel(point.X, point.Y)); NumberColor basemapColor = NumberColor.fromColor(basemap.GetPixel(point.X, point.Y)); if (PixelUtil.IsPixelReadable(bitmap.GetPixel(point.X, point.Y)) && PixelUtil.IsPixelReadable(basemap.GetPixel(point.X, point.Y))) { int colorDiff = bitmapColor.SubtractNumberColor(basemapColor); result.Add(colorDiff); } }); return(result); }
public static bool IsPixelWritable(Color pixel) { NumberColor numberColor = NumberColor.fromColor(pixel); return((numberColor.R <= 254 || numberColor.G <= 254 || numberColor.B <= 254) && numberColor.A > 0); }
public static bool IsPixelReadable(Color pixel) { NumberColor numberColor = NumberColor.fromColor(pixel); return(numberColor.A > 0); }