C#LinearGradientBrush位图垂直重复
我正在使用Microsoft Vision API,一边学习C#,Vision对象的一个属性是图像的“强调色” 从一系列分析过的图像中,我想展示那些按线性梯度排列的颜色——因为这将能够向用户显示大多数图片(例如)是蓝色的,因为蓝色占据了梯度的一半等等 我有这个工作,因为我是按色调排序的颜色,并能够产生一个线性梯度,我填充到位图 但是,默认情况下渐变是水平的,我需要垂直的——因此我使用了LinearGradientBrush.RotateTransform(90),它将实际渐变旋转得很好,但似乎不会填充整个矩形,并且会重复。这就是我得到的结果: 如何创建一个垂直直线半径来填充位图矩形对象的整个高度? 这是我的密码:C#LinearGradientBrush位图垂直重复,c#,winforms,colors,bitmap,gradient,C#,Winforms,Colors,Bitmap,Gradient,我正在使用Microsoft Vision API,一边学习C#,Vision对象的一个属性是图像的“强调色” 从一系列分析过的图像中,我想展示那些按线性梯度排列的颜色——因为这将能够向用户显示大多数图片(例如)是蓝色的,因为蓝色占据了梯度的一半等等 我有这个工作,因为我是按色调排序的颜色,并能够产生一个线性梯度,我填充到位图 但是,默认情况下渐变是水平的,我需要垂直的——因此我使用了LinearGradientBrush.RotateTransform(90),它将实际渐变旋转得很好,但似乎不
private Bitmap CreateColorGradient(System.Drawing.Rectangle rect, System.Drawing.Color[] colors)
{
Bitmap gradient = new Bitmap(rect.Width, rect.Height);
LinearGradientBrush br = new LinearGradientBrush(rect, System.Drawing.Color.White, System.Drawing.Color.White, 0, false);
ColorBlend cb = new ColorBlend();
// Positions
List<float> positions = new List<float>();
for (int i = 0; i < colors.Length; i++) positions.Add((float)i / (colors.Length - 1));
cb.Positions = positions.ToArray();
cb.Colors = colors;
br.InterpolationColors = cb;
br.RotateTransform(90);
using (Graphics g = Graphics.FromImage(gradient))
g.FillRectangle(br, rect);
return gradient;
}
私有位图CreateColorGradient(System.Drawing.Rectangle、System.Drawing.Color[]颜色)
{
位图渐变=新位图(矩形宽度、矩形高度);
LinearGradientBrush br=新的LinearGradientBrush(rect,System.Drawing.Color.White,System.Drawing.Color.White,0,false);
ColorBlend cb=新的ColorBlend();
//职位
列表位置=新列表();
对于(inti=0;i
感谢您的阅读和帮助——如果您在我的代码中看到一些可以做得更好的地方,请指出它有助于我学习:)您忽略了。当你在Grahics对象上旋转时,你的画笔矩形不再正确地适合目标位图,并且渐变无法填充它;所以它重复了 纠正
- 只需将角度设置为
,然后90
- 移除
br.旋转变换器(90)代码>呼叫
LinearGradientBrush
的WrapMode
属性。您在第一个图像中看到的是默认的WrapMode.Clamp
。通常,切换到其中一种翻转模式会有所帮助。。让我们来看看它的影响,第一个版本在正确的位置
它看起来像WrapMode.TileFlipY
,但由于我恢复了旋转,它实际上需要一个值WrapMode.TileFlipX
或WrapMode.TileFlipXY
:
br.WrapMode=WrapMode.TileFlipX代码>没问题。一定要看一看关于WrapMode的最后几句话,它经常很方便。。