private Bitmap colorOverlay(Bitmap img, Color color)
{
var bitmapData = img.LockBits(new Rectangle(0, 0, img.Width, img.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, img.PixelFormat);
byte[] imageBytes = new byte[bitmapData.Stride * img.Height];
System.Runtime.InteropServices.Marshal.Copy(bitmapData.Scan0, imageBytes, 0, imageBytes.Length);
img.UnlockBits(bitmapData);
int pixelSize = Image.GetPixelFormatSize(img.PixelFormat);
int x = 0;
int y = 0;
var bitmap = new Bitmap(img.Width, img.Height);
for (int i = 0; i < imageBytes.Length; i += pixelSize / 8)
{
var pixelData = new byte[4];
Array.Copy(imageBytes, i, pixelData, 0, 4);
var pxColor = Color.FromArgb(pixelData[0], pixelData[1], pixelData[2]);
if (pixelData[3] != 0) bitmap.SetPixel(x, y, color);
else bitmap.SetPixel(x, y, Color.Transparent);
x++;
if (x >= bitmap.Width)
{
x = 0;
y++;
}
}
return bitmap;
}