Make a function to hopefully make something look burnt if it is burnt.
This commit is contained in:
parent
78c9c5472f
commit
de0e9b4b98
@ -692,6 +692,59 @@ namespace EduNetworkBuilder
|
|||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 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.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="BaseImage"></param>
|
||||||
|
/// <returns>A burnt-looking network device.</returns>
|
||||||
|
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)
|
public bool AtLocation(Point location)
|
||||||
{
|
{
|
||||||
if (location.X >= MyLocation.X && location.X <= MyLocation.X + Size &&
|
if (location.X >= MyLocation.X && location.X <= MyLocation.X + Size &&
|
||||||
|
Loading…
Reference in New Issue
Block a user