C#如何更改位图图像颜色并应用抗锯齿

时间:2016-08-08 14:20:10

标签: c# .net visual-studio oop antialiasing

我正在制作应用程序的流程图,它涉及使用透明度(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文件夹中的默认图像。

Algo not applied

每当我应用变色算法时,这就是我的图像的样子。我想应用消除锯齿使边缘看起来像原版一样光滑,但我不知道如何。

Algo applied

我偶然发现了Interpolation,但是我无法使其工作。我真的很感激,如果有人可以帮我解决这个问题,只需要对代码进行最小的修改。任何替代方式都是好的,只要它不涉及第三方软件。非常感谢你。

0 个答案:

没有答案