Как настроить уровень прозрачности в 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());
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д