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

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

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

Есть несколько Image image1, image2, и т.п. которые "слоями" складываются через g.DrawImage(image1, .....) Мне нужно управлять общей прозрачностью отдельных Image при сложении и не могу найти либо свойство, либо способ как это сделать. Нашел вариант для Bitmap
Листинг программы
  1. private Bitmap Image_Alpha(Bitmap image, int a)
  2. {
  3. Bitmap bmp = new Bitmap(image.Width, image.Height);
  4. for (int i = 0; i < bmp.Width; i++)
  5. {
  6. for (int j = 0; j < bmp.Height; j++)
  7. {
  8. bmp.SetPixel(i, j, Color.FromArgb(a, image.GetPixel(i, j).R, image.GetPixel(i, j).G, image.GetPixel(i, j).B);
  9. }
  10. }
  11. return bmp;
  12. }
Но функция принимает Bitmap, а не исходный Image. Если напрямую в Image нельзя ничего сделать с общей полупрозрачностью, то как сконвертировать Image в Bitmap? Везде навалом варианты только из Bitmap в Image....

Решение задачи: «Как настроить уровень прозрачности в Image»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Drawing2D;
  5. using System.Linq;
  6. using System.Windows.Forms;
  7.  
  8. namespace WindowsFormsApplication1
  9. {
  10.     public partial class Form1 : Form
  11.     {
  12.         Listhart> chartsList = new Listhart>()
  13.         {
  14.             new Сhart(new Point(0, 200) ) { Color = Color.Red, Width = 4f, Opacity = 120 },
  15.             new Сhart(new Point(0, 200) ) { Color = Color.Blue, Width = 2f, Opacity = 200 }
  16.         };
  17.  
  18.         private int gridSize = 25;
  19.         private Color gridColor = Color.Silver;
  20.  
  21.         private Random rand = new Random();
  22.  
  23.         public Form1()
  24.         {
  25.             InitializeComponent();
  26.             SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
  27.             var timer = new System.Windows.Forms.Timer() { Interval = 100 };
  28.             timer.Tick += Timer_Tick;
  29.             timer.Start();
  30.         }
  31.  
  32.         private void Timer_Tick(object sender, EventArgs e)
  33.         {
  34.             foreach (var chart in chartsList)
  35.             {
  36.                 var point = chart.PathLine.Last();
  37.                 point.Offset(rand.Next(1, 5), rand.Next(-5, 6));
  38.                 chart.PathLine.Add(point);
  39.             }
  40.             Invalidate();
  41.         }
  42.  
  43.         protected override void OnPaint(PaintEventArgs e)
  44.         {
  45.             base.OnPaint(e);
  46.             var gr = e.Graphics;
  47.             gr.SmoothingMode = SmoothingMode.HighQuality;
  48.  
  49.             //draw grid
  50.             using (var pen = new Pen(gridColor))
  51.             {
  52.                 for (int y = 0; y <= Height; y++)
  53.                     gr.DrawLine(pen, 0, y * gridSize, Width, y * gridSize);
  54.                 for (int x = 0; x <= Width; x++)
  55.                     gr.DrawLine(pen, x * gridSize, 0, x * gridSize, Height);
  56.             }
  57.             //draw charts
  58.             foreach (var chart in chartsList)
  59.                 chart.Draw(gr);
  60.         }
  61.     }
  62.  
  63.     class Сhart
  64.     {
  65.         public List<Point> PathLine { get; set; } = new List<Point>();
  66.         public Color Color { get; set; } = Color.Black;
  67.         public byte Opacity { get; set; } = 255;
  68.         public float Width { get; set; } = 1f;
  69.  
  70.         public Сhart(Point startPoint)
  71.         {
  72.             PathLine.Add(startPoint);
  73.         }
  74.  
  75.         public void Draw(Graphics g)
  76.         {
  77.             if (PathLine.Count < 2) return;
  78.             using (var pen = new Pen(Color.FromArgb(Opacity, Color), Width) { EndCap = LineCap.Round })
  79.                 g.DrawLines(pen, PathLine.ToArray());
  80.         }
  81.     }
  82. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут