我有两个System.Windows.Media.Color(a和b),需要获取a并放到b上以模拟透明度。在我的合并方法中使用:
public static Image Merge(Image a,Image b)
{
for(int x=0;x < b.Width;x++ )
{
for (int y = 0; y < b.Height; y++)
{
a.SetPixel(x, y, b.GetPixel(x, y));
}
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
帮助谢谢!!
解:
public static Image Merge(Image a,Image b)
{
for(int x=0;x < b.Width;x++ )
{
for (int y = 0; y < b.Height; y++)
{
a.SetPixel(x, y, Mix(a.GetPixel(x, y), b.GetPixel(x, y), .5f));
//a.SetPixel(x, y,b.GetPixel(x, y));
}
}
return a;
}
public static Color Mix(Color from, Color to, float percent)
{
float amountFrom = 1.0f - percent;
return Color.FromArgb(
(byte)(from.A * amountFrom + to.A * percent),
(byte)(from.R * amountFrom + to.R * percent),
(byte)(from.G * amountFrom + to.G * percent),
(byte)(from.B * amountFrom + to.B * percent));
}
Run Code Online (Sandbox Code Playgroud)
我在混合方法中发现一个舍入错误,请在使用Math.Round()时解决:
公共静态Color Mix(Color from,Color to,float percent){float amountFrom = 1.0f-percent;
return Color.FromArgb(
(byte)Math.Round(from.A * amountFrom + to.A * percent),
(byte)Math.Round(from.R * amountFrom + to.R * percent),
(byte)Math.Round(from.G * amountFrom + to.G * percent),
(byte)Math.Round(from.B * amountFrom + to.B * percent));
}
Run Code Online (Sandbox Code Playgroud)
找到了具有以下方法的本文:
public static Color Mix(Color from, Color to, float percent)
{
float amountFrom = 1.0f - percent;
return Color.FromArgb(
(int)(from.A * amountFrom + to.A * percent),
(int)(from.R * amountFrom + to.R * percent),
(int)(from.G * amountFrom + to.G * percent),
(int)(from.B * amountFrom + to.B * percent));
}
Run Code Online (Sandbox Code Playgroud)
这样称呼它:
a.SetPixel(x, y, Mix(a.GetPixel(x, y), b.GetPixel(x, y), .5f));
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微使用一下该功能(甚至可以更改它),但是我认为它可以为您提供恰到好处的结果。
| 归档时间: |
|
| 查看次数: |
2370 次 |
| 最近记录: |