我正在制作应用程序的流程图,它涉及使用透明度(png)更改图像的颜色。我一直在寻找有关变通方法的工作时间,但要么它不是我正在寻找的,要么我无法使其发挥作用。
首先,让我告诉你代码以及我是如何做到的。我删除了与问题无关的代码部分。
这是我"创建"流程图符号。我继承了Label类,因为我需要以符号为中心的文本。我使用位于我的Resources文件夹中的.png格式的图像,并根据用户的需要更改颜色。
namespace PF2
{
public class Terminal : Label
{
public void createTerminal(int x)
{
this.Width = 250;
this.Height = 100;
this.Name = "Terminal" + x;
this.AutoSize = false;
Bitmap resized = new Bitmap(Properties.Resources.shapeTerminal, new Size(this.Width, this.Height));
this.Image = Globals.ChangeColor(resized, Color.Yellow);
this.Text = this.Name;
this.TextAlign = ContentAlignment.MiddleCenter;
}
}
}
这是我使用的颜色更改算法(也可以在stackoverflow上找到):
namespace PF2
{
public static class Globals
{
public static Bitmap ChangeColor(Bitmap scrBitmap, Color newColor)
{
Color actualColor;
Bitmap newBitmap = new Bitmap(scrBitmap.Width, scrBitmap.Height);
for (int i = 0; i < scrBitmap.Width; i++)
{
for (int j = 0; j < scrBitmap.Height; j++)
{
actualColor = scrBitmap.GetPixel(i, j);
if (actualColor.A > 150)
newBitmap.SetPixel(i, j, newColor);
else
newBitmap.SetPixel(i, j, actualColor);
}
}
return newBitmap;
}
}
}
最后,我如何在表格上打电话给我的班级
int x = 0;
private void btnTerminal_Click(object sender, EventArgs e)
{
Terminal newSymbol = new Terminal();
newSymbol.createTerminal(x);
newSymbol.Parent = tabPage1;
newSymbol.Location = new Point(newSymbol.Width * x + 4, 0);
x++;
}
每当我不 应用换色算法时,这就是我的图片的样子。它只是设置我的Resources文件夹中的默认图像。
每当我应用变色算法时,这就是我的图像的样子。我想应用消除锯齿使边缘看起来像原版一样光滑,但我不知道如何。
我偶然发现了Interpolation,但是我无法使其工作。我真的很感激,如果有人可以帮我解决这个问题,只需要对代码进行最小的修改。任何替代方式都是好的,只要它不涉及第三方软件。非常感谢你。