diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs
index 1f32b7b..e690540 100644
--- a/EduNetworkBuilder/NetworkDevice.cs
+++ b/EduNetworkBuilder/NetworkDevice.cs
@@ -692,6 +692,59 @@ namespace EduNetworkBuilder
return b;
}
+ ///
+ /// We concoct a burn image overlay the same shape of the object we are drawing. Loop through the image
+ /// and turn the burn-image transparent everywhere the original image is transparent. Then, draw the
+ /// shaped burn-image on top of the original image.
+ ///
+ ///
+ /// A burnt-looking network device.
+ public Image BurnedImage(Image BaseImage)
+ {
+ Bitmap b = new Bitmap(BaseImage);
+ //Make a burn image that is the same size as the base image
+ Bitmap Burn = new Bitmap(b.Width, b.Height);
+ Graphics.FromImage(Burn).DrawImage(Properties.Resources.BurnMark, new Rectangle(0, 0, b.Width, b.Height));
+
+ BitmapData bData = b.LockBits(new Rectangle(0, 0, BaseImage.Width, BaseImage.Height), ImageLockMode.ReadWrite, b.PixelFormat);
+ BitmapData burnData = Burn.LockBits(new Rectangle(0, 0, BaseImage.Width, BaseImage.Height), ImageLockMode.ReadWrite, b.PixelFormat);
+
+ /* GetBitsPerPixel just does a switch on the PixelFormat and returns the number */
+ int bitsPerPixel = Image.GetPixelFormatSize(bData.PixelFormat);
+
+ /*the size of the image in bytes */
+ int size = bData.Stride * bData.Height;
+
+ /*Allocate buffer for image*/
+ byte[] OrigImagedata = new byte[size];
+ byte[] BurnImagedata = new byte[size];
+
+ /*This overload copies data of /size/ into /data/ from location specified (/Scan0/)*/
+ System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, OrigImagedata, 0, size);
+ System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, BurnImagedata, 0, size);
+
+ for (int i = 0; i < size; i += bitsPerPixel / 8)
+ {
+ //double magnitude = 1 / 3d * (data[i] + data[i + 1] + data[i + 2]);
+ if (OrigImagedata[i + 3] == 0) //If the original image is transparent, make the burn image transparent
+ {
+ BurnImagedata[i + 3] = 0;//Make it transparent
+ }
+ }
+
+ /* This override copies the data back into the location specified */
+ System.Runtime.InteropServices.Marshal.Copy(OrigImagedata, 0, bData.Scan0, OrigImagedata.Length);
+ System.Runtime.InteropServices.Marshal.Copy(BurnImagedata, 0, burnData.Scan0, OrigImagedata.Length);
+
+ b.UnlockBits(bData);
+ Burn.UnlockBits(burnData);
+
+ Graphics.FromImage(b).DrawImage(Burn,new Point(0,0));
+
+ return b;
+ }
+
+
public bool AtLocation(Point location)
{
if (location.X >= MyLocation.X && location.X <= MyLocation.X + Size &&