代码转自https://www.cnblogs.com/godzza/p/7428080.html
由本人进行C#编译,调用程序(C语言)的制作。
个人水平低下,只能做成这样
工具在:https://download.csdn.net/download/Fish22335/12317866
或者我的空间内
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
namespace ImageBlackToAlpha
{
class Program
{
static byte Max(params byte[] values)
{
if (values == null || values.Length == 0)
return 0;
var max = values[0];
for (var i = 1; i < values.Length; ++i)
{
max = Math.Max(max, values[i]);
}
return max;
}
static byte Min(params byte[] values)
{
if (values == null || values.Length == 0)
return 0;
var min = values[0];
for (var i = 1; i < values.Length; ++i)
{
min = Math.Min(min, values[i]);
}
return min;
}
static void Main(string[] args)
{
if (args.Count() < 2)
{
Console.WriteLine("Usage: \"ImageBlackToAlpha\" [+ source] [destination [/F]]");
Console.WriteLine(" source InputPngPath ");
Console.WriteLine(" destination OutputPngPath");
Console.WriteLine(" /F Forces all RGB to White(254,254,254)");
return;
}
var toWhite = false;
var image = Image.FromFile(args[0]);
var bitmap = new Bitmap(image);
var save = new Bitmap(bitmap.Width, bitmap.Height);
if (args.Count() == 3)
{
toWhite = args[2] == "/F" || args[2] == "/f";
}
for (var x = 0;x< bitmap.Width;++x)
{
for(var y = 0; y < bitmap.Height; ++y)
{
var clr = bitmap.GetPixel(x, y);
if (toWhite)
{
// 只支持 纯黑白贴图
var alpha = (0 + clr.R + clr.G + clr.B) / 3;
alpha = Math.Min(clr.A, alpha);
//因为 纯白(RGB)而Alpha小于255 会出现 全透明的问题 所以不能使用 255//bug?
clr = Color.FromArgb(alpha, 254, 254, 254);
}
else
{
var max = Max(clr.R, clr.G, clr.B);
//因为 纯白(RGB)而Alpha小于255 会出现 全透明的问题 所以不能使用 255//bug?
var sub = 254 - max;
var alpha = Math.Min(clr.A, max);
clr = Color.FromArgb(alpha, clr.R + sub, clr.G + sub, clr.B + sub);
}
save.SetPixel(x, y, clr);
}
}
save.MakeTransparent(Color.Transparent);
save.Save(args[1], ImageFormat.Png);
}
}
}