如何在表单上的任何位置绘制阴影?

jay_t55

使用GDI +,如何在指定的坐标处绘制边框阴影或投影阴影?我并不想将阴影附加到任何东西上,我只需要从x40,0px到x140px,0px绘制阴影即可。我无法找到有关此的任何信息,并且我开始认为这是不可能的。

我的意图是在控件底部的某个位置绘制阴影,但我不希望它成为控件的整个宽度,这就是为什么我特别询问仅在指定位置绘制的原因。

战车

这是一段代码,可以帮助您入门。

drawShadow方法沿绘制给定颜色和深度的阴影GraphicsPath

使用GraphicsPath可以绘制比单纯形状更复杂的阴影Rectangles

阴影是用颜色矢量绘制的,该颜色从阴影逐渐变为背景颜色,并向右和向下移动。(您可以通过更改阴影矢量来改变方向。值大于1将需要较大的Pen宽度!(*))

为了演示该例程,我添加了一个getRectPath函数,函数GraphicsPath从中创建一个Rectangle然后单击一个Button来调用绘图例程。

当然,在生产代码中,您必须将其附加到Paint事件上!

void drawShadow(Graphics G, Color c, GraphicsPath GP, int d)
{
    Color[] colors = getColorVector(c, this.BackColor, d).ToArray();
    for (int i = 0; i < d; i++)
    {
        G.TranslateTransform(1f, 0.75f);                // <== shadow vector!
        using (Pen pen = new Pen(colors[i], 1.75f  ) )  // <== pen width (*)
            G.DrawPath(pen, GP);
    }
    G.ResetTransform();
}


List<Color> getColorVector(Color fc, Color bc, int depth)
{
    List<Color> cv = new List<Color>();
    float dRed = 1f * (bc.R - fc.R) / depth;
    float dGreen = 1f * (bc.G - fc.G) / depth;
    float dBlue = 1f * (bc.B - fc.B) / depth;
    for (int d = 1; d <= depth; d++)
         cv.Add(Color.FromArgb(255,   (int) (fc.R + dRed * d),
           (int) (fc.G + dGreen * d), (int) (fc.B + dBlue * d) ));
    return cv;
}

GraphicsPath getRectPath(Rectangle R)
{
    byte[] fm = new byte[3];
    for (int b = 0; b < 3; b++) fm[b] = 1;
    List<Point> points = new List<Point>();
    points.Add(new Point(R.Left, R.Bottom));
    points.Add(new Point(R.Right, R.Bottom));
    points.Add(new Point(R.Right, R.Top));
    return new GraphicsPath(points.ToArray(), fm);
}

private void button1_Click(object sender, EventArgs e)
{
    using (Graphics G = this.CreateGraphics())
      drawShadow(G, Color.Black, getRectPath(new Rectangle(111, 111, 222, 222)), 17);
}

编辑:我已经更改了解决方案,以允许复杂的阴影和任意阴影矢量,而不会因alpha通道的重叠而产生难看的伪影。假设背景具有统一的颜色!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在画布绘制的元素上添加材质样式的阴影?

来自分类Dev

如何在画布绘制的元素上添加材质样式的阴影?

来自分类Dev

如何在vb.net中的表单上的任何位置检测到鼠标单击?

来自分类Dev

如何在屏幕上的任何位置检测鼠标位置?

来自分类Dev

如何在触摸Windows Phone的位置上绘制椭圆?

来自分类Dev

如何在触摸Windows Phone的位置上绘制椭圆?

来自分类Dev

如何在Windows上的任何位置运行.phar?

来自分类Dev

如何在滚动条上使用“位置:粘性”在td / th中添加或删除阴影?

来自分类Dev

如何绘制弯曲的阴影?

来自分类Dev

如何在drawingcontext工具上显示阴影

来自分类Dev

如何在Matlab上消除图像阴影?

来自分类Dev

如何在<rect>上添加阴影

来自分类Dev

如何在drawingcontext工具上显示阴影

来自分类Dev

AngularJS D3。如何在现有图形上附加任何内容(在其上绘制)?

来自分类Dev

如何在地图片段上绘制从当前位置到用户输入位置的路径?

来自分类Dev

如何在ImageMagick中绘制文本并对其进行阴影?

来自分类Dev

如何在PreviewView上绘制?

来自分类Dev

如何在TTrayIcon上绘制

来自分类Dev

如何在 GLCanvas 上绘制?

来自分类Dev

如何在MS Access表单上动态保持控件居中(相对位置)?

来自分类Dev

阴影贴图OpenGL阴影并不总是绘制,并且绘制光源位置的位置

来自分类Dev

如何在9个可能位置中的任何一个位置上包含两个图像的div

来自分类Dev

如何在圆形imageView android上添加阴影和边框?

来自分类Dev

如何在Xamarin Forms上删除按钮的阴影

来自分类Dev

Flutter-如何在焦点上的TextFormField中添加阴影

来自分类Dev

如何在表格行上重叠框阴影?

来自分类Dev

如何在如图所示的矩形上制作梯形阴影?

来自分类Dev

如何在SwiftUI上为PageTabViewStyle添加阴影?

来自分类Dev

如何在Material UI中的Avatar组件上使用阴影

Related 相关文章

  1. 1

    如何在画布绘制的元素上添加材质样式的阴影?

  2. 2

    如何在画布绘制的元素上添加材质样式的阴影?

  3. 3

    如何在vb.net中的表单上的任何位置检测到鼠标单击?

  4. 4

    如何在屏幕上的任何位置检测鼠标位置?

  5. 5

    如何在触摸Windows Phone的位置上绘制椭圆?

  6. 6

    如何在触摸Windows Phone的位置上绘制椭圆?

  7. 7

    如何在Windows上的任何位置运行.phar?

  8. 8

    如何在滚动条上使用“位置:粘性”在td / th中添加或删除阴影?

  9. 9

    如何绘制弯曲的阴影?

  10. 10

    如何在drawingcontext工具上显示阴影

  11. 11

    如何在Matlab上消除图像阴影?

  12. 12

    如何在<rect>上添加阴影

  13. 13

    如何在drawingcontext工具上显示阴影

  14. 14

    AngularJS D3。如何在现有图形上附加任何内容(在其上绘制)?

  15. 15

    如何在地图片段上绘制从当前位置到用户输入位置的路径?

  16. 16

    如何在ImageMagick中绘制文本并对其进行阴影?

  17. 17

    如何在PreviewView上绘制?

  18. 18

    如何在TTrayIcon上绘制

  19. 19

    如何在 GLCanvas 上绘制?

  20. 20

    如何在MS Access表单上动态保持控件居中(相对位置)?

  21. 21

    阴影贴图OpenGL阴影并不总是绘制,并且绘制光源位置的位置

  22. 22

    如何在9个可能位置中的任何一个位置上包含两个图像的div

  23. 23

    如何在圆形imageView android上添加阴影和边框?

  24. 24

    如何在Xamarin Forms上删除按钮的阴影

  25. 25

    Flutter-如何在焦点上的TextFormField中添加阴影

  26. 26

    如何在表格行上重叠框阴影?

  27. 27

    如何在如图所示的矩形上制作梯形阴影?

  28. 28

    如何在SwiftUI上为PageTabViewStyle添加阴影?

  29. 29

    如何在Material UI中的Avatar组件上使用阴影

热门标签

归档