Изменение яркости изображения - C# (191754)

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

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

Хочу написать приложение, которое меняет яркость. Но получается лишь следующее, проблема в том, что я не могу понять как менять каждый пиксель
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
 
namespace D
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void buttonLoad_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
                picture1.Load(openFileDialog1.FileName);
        }
 
        private void buttonPer_Click(object sender, EventArgs e)
        {
            var bitmapStart = (Bitmap)picture1.Image;
            var bitmapBase = new Bitmap(picture1.Image.Width, picture1.Image.Height);
            picture2.Image = bitmapBase;
            
            var countPixel = bitmapStart.Width * bitmapStart.Height;
            var index = 0;
            for (var x = 0; x < picture1.Image.Width; x++)
                for (var y = 0; y < picture1.Image.Height; y++)
                {
                    var colorStart = bitmapStart.GetPixel(x, y);
                    byte[] data = new[] {colorStart.R, colorStart.G, colorStart.B};
                    byte[] result = Class1.CalculateBrightness(data);
                    var colorBase = Color.FromArgb(result[0], result[1], result[2]);
                 
                    bitmapBase.SetPixel(x, y, colorBase);
                   
                   progressBar1.Value = Convert.ToInt32(100*((double) index++/countPixel));
                }
            picture2.Update();
        }
        }   
    }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace D
{
    class Class1
    {
          public static byte[] CalculateBrightness(byte[] rgb)
        {
               var resultBrightness = new double[widthMatrixBrightness];
            for (var x = 0; x < heightMatrixBrightness; x++)
                for (var y = 0; y < widthMatrixBrightness; y++)
                    resultBrightness[x] += matrixBrightness[x][y] * rgb[y];
 
            return new[]
                {
                    Convert.ToByte(Math.Round(resultBrightness[0], 0)),
                    Convert.ToByte(Math.Round(resultBrightness[1], 0) + 128),
                    Convert.ToByte(Math.Round(resultBrightness[2], 0) + 128)
                };
        }
 
        private static readonly byte widthMatrixBrightness = 3;
        private static readonly byte heightMatrixBrightness = 3;
        private static readonly double[][] matrixBrightness = new[] { new[] {.299, .587, 0.114}, 
                                                                      new[] {-.168736, -.331264, .5}, 
                                                                      new[] {.5, -.418688, -.081312}};

    }
          
        }
Помогите, пожалуйста, либо наведите на мысль, как это сделать

Решение задачи: «Изменение яркости изображения»

textual
Листинг программы
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Net;
using System.Windows.Forms;
 
namespace WindowsFormsApplication290
{
    public partial class Form1 : Form
    {
        private Bitmap source;
        private TrackBar tb;
 
        public Form1()
        {
            InitializeComponent();
 
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
 
            source = (Bitmap)Image.FromStream(new WebClient().OpenRead("http://img-fotki.yandex.ru/get/5114/36014149.81/0_6cbc9_f3de6b6_XL"));
            source.SetResolution(96, 96);
 
            tb = new TrackBar(){Parent = this, Value = 5};
            tb.ValueChanged += delegate { Invalidate(); };
        }
 
        private Bitmap ChangeBrightness(Bitmap img, float k)
        {
            var imageAttributes = new ImageAttributes();
 
            float[][] colorMatrixElements = { 
               new float[] {k,  0,  0,  0, 0},
               new float[] {0,  k,  0,  0, 0},
               new float[] {0,  0,  k,  0, 0},
               new float[] {0,  0,  0,  1f, 0},
               new float[] {0f, 0f, 0f, 0, 1f}};
 
            var colorMatrix = new ColorMatrix(colorMatrixElements);
            imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
 
            var result = new Bitmap(img.Width, img.Height);
            using (var gr = Graphics.FromImage(result))
                gr.DrawImage(img,
                           new Rectangle(0, 0, img.Width, img.Height),
                           0, 0,
                           img.Width,
                           img.Height,
                           GraphicsUnit.Pixel,
                           imageAttributes);
 
            return result;
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
 
            e.Graphics.DrawImage(source, 0, 0);
 
            var brightness = (tb.Value - 5f) / 5f;
            if (brightness <= 0) 
                brightness = 1f / (-brightness + 1);
            else
                brightness = 1 + brightness;
 
            var res = ChangeBrightness(source, brightness);
            e.Graphics.DrawImage(res, source.Width + 3, 0);
            res.Dispose();
        }
    }
}

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


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

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

6   голосов , оценка 4 из 5