Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2016, 08:27   #1
IgoreKMaN
Пользователь
 
Регистрация: 24.04.2012
Сообщений: 88
Восклицание Изменение яркости. Нахождение параметра альфа

Всем привет! Имеется программа изменения яркости
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Correction {
    public partial class Form1 : Form {
 
        Bitmap pic; //Исходное изображение
 
        public Form1() {
            InitializeComponent();
 
            try {
                pic = new Bitmap(Bitmap.FromFile("default.png")); //Подгружаем изображение
            }
            catch { }
 
            pictureBox1.Image = pic;
        }
 
        private void button1_Click(object sender, EventArgs e) {
            int minL = 1; //Минимальное значение яркости изображения
            int maxL = 0; //Максимальное значение яркости изображения
            int avgL = 0; //Среднее арифметическое яркости изображения
 
            //Собираем в цикле статистику по изображению
            for (int x = 0; x < pic.Width; x++) {
                for (int y = 0; y < pic.Height; y++) {
                    Color pixel = pic.GetPixel(x, y); //Текущий пиксель
                    int L = (pixel.R + pixel.G + pixel.B) / 3; //Среднее арифметическое (для цветного избражения)
                    if (minL > L) minL = L; //Получаем минимальное значение яркости
                    if (maxL < L) maxL = L; //Получаем максимальное значение яркости
                    avgL += L; //Суммируем все яркости
                }
            }
            avgL = avgL / (pic.Width * pic.Height); //Получаем среднее арифметическое всех яркостей
 
            //Конвертируем в десятичные значения яркостей делением на 255
            double minLd = (double) minL / 255;
            double maxLd = (double) maxL / 255;
            double avgLd = (double) avgL / 255;
 
            int newAvgL = 0; //Новая средняя яркость
            Bitmap newPic = new Bitmap(pic.Width, pic.Height); //Новое изоражение для отрисовки
 
            //Отрисовываем новое изображение и вычисляем новую среднюю яркость в цикле
            for (int x = 0; x < pic.Width; x++) {
                for (int y = 0; y < pic.Height; y++) {
                    Color pixel = pic.GetPixel(x, y); //Текущий пиксель
                    double param = Double.Parse(textBox1.Text); //Параметр для возведения в степень
                    //Получаем все цвета пикселя
                    int R = (int)((Math.Pow(( (double) pixel.R / 255 - minLd) / (maxLd - minLd), param)) * 255);
                    int G = (int)((Math.Pow(( (double) pixel.G / 255 - minLd) / (maxLd - minLd), param)) * 255);
                    int B = (int)((Math.Pow(( (double) pixel.B / 255 - minLd) / (maxLd - minLd), param)) * 255);
                    
                    if (R < 0) R = 0;
                    if (G < 0) G = 0;
                    if (B < 0) B = 0;
 
                    newAvgL += (R + G + B) / 3; //Среднее арифметическое (для цветного избражения)
                    Color newPixel = Color.FromArgb(R, G, B); //Новый пиксель для отрисовки
                    newPic.SetPixel(x, y, newPixel);
                }
            }
            newAvgL = newAvgL / (pic.Width * pic.Height); //Получаем новое среднее арифметическое всех яркостей
 
            pictureBox1.Image = newPic; //Обновляем изображение на форме
            label2.Text = "Brightnes: " + newAvgL; //Обновляем текст на форме
        }
    }
}
Все в принципе хорошо НО, нужно найти(подсчитать, а не вводить) параметр param(альфа в в формуле)
Код:
double param = Double.Parse(textBox1.Text); //Параметр для возведения в степень
Подскажите кто-нибудь, неделю с ней уже бьюсь
P.S. Найти нужно по этой формуле
Изображения
Тип файла: jpg hY6pqv99Ygw.jpg (6.0 Кб, 111 просмотров)
IgoreKMaN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение яркости изображения Veryn4ik1993 C# (си шарп) 1 01.06.2015 09:51
Дрова яркости на асус Вадим170300 Компьютерное железо 12 27.07.2013 08:30
изменение насыщенности и яркости цвета изображения D][mon Помощь студентам 0 05.04.2012 00:00
изменения яркости монитора J.Bond Помощь студентам 5 29.02.2012 21:19