-1
如何在c#中的圖像上應用漸變效果。我有一個透明的圖像與黑色繪圖我想申請2顏色漸變的圖像是這可能在gdi?如何在圖像GDI上應用漸變效果
這裏是我想要實現 http://postimg.org/image/ikz1ie7ip/
如何在c#中的圖像上應用漸變效果。我有一個透明的圖像與黑色繪圖我想申請2顏色漸變的圖像是這可能在gdi?如何在圖像GDI上應用漸變效果
這裏是我想要實現 http://postimg.org/image/ikz1ie7ip/
影響您創建一個PathGradientBrush,然後你與畫筆畫出你的文本。
要創建漸變色填充了刷,你可以這樣做一個位圖:所以現在你有與它的梯度圖像
public Bitmap GradientImage(int width, int height, Color color1, Color color2, float angle)
{
var r = new Rectangle(0, 0, width, height);
var bmp = new Bitmap(width, height);
using (var brush = new LinearGradientBrush(r, color1, color2, angle, true))
using (var g = Graphics.FromImage(bmp))
g.FillRectangle(brush, r);
return bmp;
}
,所有你需要做的就是把在阿爾法從原始圖像到新創建的圖像。我們可以從a blog post I once wrote採取transferOneARGBChannelFromOneBitmapToAnother功能:
public enum ChannelARGB
{
Blue = 0,
Green = 1,
Red = 2,
Alpha = 3
}
public static void transferOneARGBChannelFromOneBitmapToAnother(
Bitmap source,
Bitmap dest,
ChannelARGB sourceChannel,
ChannelARGB destChannel)
{
if (source.Size!=dest.Size)
throw new ArgumentException();
Rectangle r = new Rectangle(Point.Empty, source.Size);
BitmapData bdSrc = source.LockBits(r, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
BitmapData bdDst = dest.LockBits(r, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
unsafe
{
byte* bpSrc = (byte*)bdSrc.Scan0.ToPointer();
byte* bpDst = (byte*)bdDst.Scan0.ToPointer();
bpSrc += (int)sourceChannel;
bpDst += (int)destChannel;
for (int i = r.Height * r.Width; i > 0; i--)
{
*bpDst = *bpSrc;
bpSrc += 4;
bpDst += 4;
}
}
source.UnlockBits(bdSrc);
dest.UnlockBits(bdDst);
}
現在你可以這樣做:
var newImage = GradientImage(original.Width, original.Height, Color.Yellow, Color.Blue, 45);
transferOneARGBChannelFromOneBitmapToAnother(original, newImage, ChannelARGB.Alpha, ChannelARGB.Alpha);
而且有你。 :-)
它的圖像不是文字?我必須對圖像應用漸變效果。 – user964829 2014-09-22 15:54:22
這更簡單。 – 2014-09-22 19:33:52
其填充整個圖像的梯度我想知道需要得到不透明的areat graphicspath然後填充該路徑我不知道如何找到圖像上的非透明區域 – user964829 2014-09-23 15:44:56