Как настроить уровень прозрачности в Image - C#

Узнай цену своей работы

Формулировка задачи:

Есть несколько Image image1, image2, и т.п. которые "слоями" складываются через g.DrawImage(image1, .....) Мне нужно управлять общей прозрачностью отдельных Image при сложении и не могу найти либо свойство, либо способ как это сделать. Нашел вариант для Bitmap
 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;
        }
Но функция принимает Bitmap, а не исходный Image. Если напрямую в Image нельзя ничего сделать с общей полупрозрачностью, то как сконвертировать Image в Bitmap? Везде навалом варианты только из Bitmap в Image....

Решение задачи: «Как настроить уровень прозрачности в 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());
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5