如何利用C#编程实现灯光衰减的效果,我需要的是像灯光一样,外发光要有衰减,是如何实现的?

 我来答
dkxpsg
2013-05-22 · TA获得超过1628个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:1048万
展开全部

你可以使用PathGradientBrush来做图形的渐变。

代码如下:

using System.Drawing.Drawing2D;
private void Form19_Paint(object sender, PaintEventArgs e)
{
GraphicsPath graphicsPath = new GraphicsPath();
graphicsPath.AddEllipse(new Rectangle(0, 0, 200, 200));
PathGradientBrush pathGradientBrush = new PathGradientBrush(graphicsPath);
pathGradientBrush.CenterColor = Color.FromArgb(255, 232, 3);
pathGradientBrush.CenterPoint = new PointF(100, 100);
pathGradientBrush.SurroundColors = new Color[] { Color.Transparent };
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillEllipse(pathGradientBrush, new Rectangle(0, 0, 200, 200));
graphicsPath.Dispose();
pathGradientBrush.Dispose();
}

更多追问追答
追问
您好,我还想问一下如果我读入一个PNG图片,能重新作出渐变的填充?另外可以做出类似光芒射线的效果吗?
追答

如果要做图片的左右或上下的渐变比较容易,如果要做中心的渐变就比较麻烦了,给你简单写了左右渐变的例子。

代码如下:

using System.Drawing.Drawing2D;

using System.Drawing.Imaging;

private void button1_Click(object sender, EventArgs e)

{

    Bitmap bitmap = Bitmap.FromFile("d:\\baidu.gif") as Bitmap;

    Bitmap newBitmap = ImageGradient(bitmap);

    pictureBox1.Image = bitmap;

    pictureBox2.Image = newBitmap;

}

private Bitmap ImageGradient(Bitmap bitmap)

{

    Bitmap newBitmap = new Bitmap(bitmap, bitmap.Width, bitmap.Height);

    BitmapData bitmapData = newBitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb);

    byte[] byteArr = new byte[bitmapData.Stride * bitmapData.Height];

    Marshal.Copy(bitmapData.Scan0, byteArr, 0, byteArr.Length);

    int index;

    for (int i = 0; i < bitmapData.Height; i++)

    {

        index = i * bitmapData.Stride + 3;

        for (int j = 0; j < bitmapData.Width; j++)

        {

            byteArr[index] = (byte)(255 - (float)j / bitmapData.Width * 255);

            index += 4;

        }

    }

    Marshal.Copy(byteArr, 0, bitmapData.Scan0, byteArr.Length);

    newBitmap.UnlockBits(bitmapData);

    return newBitmap;

}

光芒射线的代码发不上去了,你再追问一下吧。

641964922
2013-05-22 · 超过33用户采纳过TA的回答
知道答主
回答量:169
采纳率:0%
帮助的人:92.1万
展开全部
发光强度,和电流有关,在电阻一定的情况下只有用代码控制电压了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yqsky3964
2013-05-22 · TA获得超过1875个赞
知道小有建树答主
回答量:1184
采纳率:0%
帮助的人:667万
展开全部
C#的WPF应该可以实现你说的效果!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangpaishi
2013-05-22 · TA获得超过570个赞
知道小有建树答主
回答量:932
采纳率:52%
帮助的人:760万
展开全部
这个属于图片处理,有对应的处理方法和算法
对于我这个不懂的,我会用一幅黑色的图挡在前面,通过调节这幅黑色图片的透明度来控制用户对背后的亮光的看到程度,当然,这个是整幅图的一起遮挡或不同透明程度的遮挡
原理一样,想要有衰减,就不能统一设置一样的透明度,以光亮中心为圆心,不同的半径用不同的透明度,从小半径到大半径,透明度从大到小,当然这个涉及到一个执行效率的问题
当然也可以直接对原图处理好,在PS中处理好灯光衰减效果,前面的黑色遮挡层,设置透明度就可以了
当然也可以直接对原图中的像素进行调节达到效果,就不需要什么遮挡层了
当然,还是效率问题,自己研究,表示没怎么学过图片处理
我说的是自己绘图,先绘制原图,再覆盖绘制带有不同透明度的前景图片
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式