Как настроить уровень прозрачности в Image - C#
Формулировка задачи:
Есть несколько Image image1, image2, и т.п. которые "слоями" складываются через g.DrawImage(image1, .....)
Мне нужно управлять общей прозрачностью отдельных Image при сложении и не могу найти либо свойство, либо способ как это сделать.
Нашел вариант для Bitmap
Но функция принимает Bitmap, а не исходный Image.
Если напрямую в Image нельзя ничего сделать с общей полупрозрачностью, то как сконвертировать Image в Bitmap? Везде навалом варианты только из Bitmap в Image....
private Bitmap Image_Alpha(Bitmap image, int a) { Bitmap bmp = new Bitmap(image.Width, image.Height); for (int i = 0; i < bmp.Width; i++) { for (int j = 0; j < bmp.Height; j++) { bmp.SetPixel(i, j, Color.FromArgb(a, image.GetPixel(i, j).R, image.GetPixel(i, j).G, image.GetPixel(i, j).B); } } return bmp; }
Решение задачи: «Как настроить уровень прозрачности в Image»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { List<Сhart> chartsList = new List<Сhart>() { new Сhart(new Point(0, 200) ) { Color = Color.Red, Width = 4f, Opacity = 120 }, new Сhart(new Point(0, 200) ) { Color = Color.Blue, Width = 2f, Opacity = 200 } }; private int gridSize = 25; private Color gridColor = Color.Silver; private Random rand = new Random(); public Form1() { InitializeComponent(); SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true); var timer = new System.Windows.Forms.Timer() { Interval = 100 }; timer.Tick += Timer_Tick; timer.Start(); } private void Timer_Tick(object sender, EventArgs e) { foreach (var chart in chartsList) { var point = chart.PathLine.Last(); point.Offset(rand.Next(1, 5), rand.Next(-5, 6)); chart.PathLine.Add(point); } Invalidate(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); var gr = e.Graphics; gr.SmoothingMode = SmoothingMode.HighQuality; //draw grid using (var pen = new Pen(gridColor)) { for (int y = 0; y <= Height; y++) gr.DrawLine(pen, 0, y * gridSize, Width, y * gridSize); for (int x = 0; x <= Width; x++) gr.DrawLine(pen, x * gridSize, 0, x * gridSize, Height); } //draw charts foreach (var chart in chartsList) chart.Draw(gr); } } class Сhart { public List<Point> PathLine { get; set; } = new List<Point>(); public Color Color { get; set; } = Color.Black; public byte Opacity { get; set; } = 255; public float Width { get; set; } = 1f; public Сhart(Point startPoint) { PathLine.Add(startPoint); } public void Draw(Graphics g) { if (PathLine.Count < 2) return; using (var pen = new Pen(Color.FromArgb(Opacity, Color), Width) { EndCap = LineCap.Round }) g.DrawLines(pen, PathLine.ToArray()); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д