Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 71

Применение фильтров на изображение

21.05.2017, 21:26. Показов 3827. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пишу программу для работы с массивом пикселей на bitmap. На форме есть picturebox в котором на bitmap помещено изображение. Имеется 6 таркбаров - 3 из них регулируют значение пикселей на всём bitmap, а 3 других - регулируют эти же значения но начиная с темных пикселей. Не получается сделать так чтоб оба этих фильтра работали вместе - когда применяешь один фильтр второй фильтр сбрасывается. Пытался применить напрямую на bitmap - фильтры друг друга не отменяли но не получалось вернуть рисунок в исходное состояние.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
 private void Form1_Load(object sender, EventArgs e)
        {
            rd = trackBar1.Value / 100f;
            gn = trackBar2.Value / 100f;
            bl = trackBar3.Value / 100f;
 
            pictureBox2.Image = new Bitmap(pictureBox2.Width, pictureBox2.Height);
            g = Graphics.FromImage(pictureBox2.Image);
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            b = new Bitmap("D:\\foto1.jpg");
            pictureBox1.Image = b;
            pictureBox1.Refresh();
        }
 
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
 
        }
 
        public Bitmap Contrast(Bitmap sourceBitmap,float blueTint, float greenTint, float redTint)
        {
            BitmapData sourceData = sourceBitmap.LockBits(new Rectangle(0, 0,
                                        sourceBitmap.Width, sourceBitmap.Height),
                                        ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
 
            byte[] pixelBuffer = new byte[sourceData.Stride * sourceData.Height];
 
            Marshal.Copy(sourceData.Scan0, pixelBuffer, 0, pixelBuffer.Length);
 
            sourceBitmap.UnlockBits(sourceData);
 
 
            float blue = 0;
            float green = 0;
            float red = 0;
            byte b255 = 255;
            for (int k = 0; k + 4 < pixelBuffer.Length; k += 4)
            {
                if (op_type == 1)
                {
                    if (checkBox4.Checked) blue = pixelBuffer[k] + (255 - pixelBuffer[k]) * blueTint;
                    if (checkBox3.Checked) green = pixelBuffer[k + 1] + (255 - pixelBuffer[k + 1]) * greenTint;
                    if (checkBox2.Checked) red = pixelBuffer[k + 2] + (255 - pixelBuffer[k + 2]) * redTint;
 
                    if (blue > 255)
                    { blue = 255; }
                    else if (blue < 0)
                    { blue = 0; }
 
                    if (green > 255)
                    { green = 255; }
                    else if (green < 0)
                    { green = 0; }
 
                    if (red > 255)
                    { red = 255; }
                    else if (red < 0)
                    { red = 0; }
 
                    pixelBuffer[k] = (byte)blue;
                    pixelBuffer[k + 1] = (byte)green;
                    pixelBuffer[k + 2] = (byte)red;
            }
            if (op_type == 2)
            {
                if (pixelBuffer[k] < blueTint && checkBox5.Checked) pixelBuffer[k] = (byte)(b255 - pixelBuffer[k]);
                if (pixelBuffer[k + 1] < greenTint && checkBox6.Checked) pixelBuffer[k + 1] = (byte)(b255 - pixelBuffer[k + 1]);
                if (pixelBuffer[k + 2] < redTint && checkBox7.Checked) pixelBuffer[k + 2] = (byte)(b255 - pixelBuffer[k + 2]);
            }
        }
 
            Bitmap resultBitmap = new Bitmap(sourceBitmap.Width, sourceBitmap.Height);
 
            BitmapData resultData = resultBitmap.LockBits(new Rectangle(0, 0,
                                        resultBitmap.Width, resultBitmap.Height),
                                        ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
 
            Marshal.Copy(pixelBuffer, 0, resultData.Scan0, pixelBuffer.Length);
            resultBitmap.UnlockBits(resultData);
 
            return resultBitmap;
        }
 
        private void checkBox2_CheckedChanged(object sender, EventArgs e) //чекбосков 3 но они все привязаны к одному. Нужны чтоб не изменяла одно из 3 значений rgb
        {
            op_type = 1;
            rd = trackBar1.Value / 100f; gn = trackBar2.Value / 100f; bl = trackBar3.Value / 100f; 
            b = Contrast(b, bl, gn, rd);
            pictureBox1.Image = b;
            pictureBox1.Refresh();
        }
 
 
        private void checkBox7_CheckedChanged(object sender, EventArgs e) //чекбосков 3 но они все привязаны к одному. Нужны чтоб не изменяла одно из 3 значений rgb
        {
            op_type = 2;
            rd = trackBar1.Value; gn = trackBar2.Value; bl = trackBar3.Value;
            b = Contrast(b, bl, gn, rd);
            pictureBox1.Image = b;
            pictureBox1.Refresh();
        }
 
        private void trackBar3_ValueChanged(object sender, EventArgs e) //тракбара 3 но они все привязаны к одному
        {
            op_type = 1;
            //if(q > (sender as TrackBar).Value) { rd = -(trackBar1.Value / 100f); gn = -(trackBar2.Value / 100f); bl = -(trackBar3.Value / 100f); }
            rd = trackBar1.Value / 100f; gn = trackBar2.Value / 100f; bl = trackBar3.Value / 100f;
            //b = Contrast(b, bl, gn, rd);
            pictureBox1.Image = Contrast(b, bl, gn, rd); ;
            pictureBox1.Refresh();
            q = (sender as TrackBar).Value;
        }
 
        private void trackBar6_ValueChanged(object sender, EventArgs e) //тракбара 3 но они все привязаны к одному
        {
            op_type = 2;
            rd = trackBar6.Value; gn = trackBar5.Value; bl = trackBar4.Value;
            pictureBox1.Image = Contrast(b, bl, gn, rd);
            pictureBox1.Refresh();
            q = (sender as TrackBar).Value;
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2017, 21:26
Ответы с готовыми решениями:

Применение фильтров к graphics
Написал свою библиотек графического интерфейса с разделенным функционалом и представлением. Логика такая - есть компонент, он наследует...

Применение фильтров ОС UNIX
Привет, хотел попросить помочь с задачей. Нужно найти в подкаталоге файл, содержащий наибольшее количество строк. Я так понимаю надо...

Применение фильтров к фото
как к данному коду прикрутить меню выбора накладки фильтров на фото в точности: 1) накладку серого if (mode == 0): for i in...

1
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 71
21.05.2017, 21:36  [ТС]
Фильтры.rar сорри забыл прикрепить проект
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2017, 21:36
Помогаю со студенческими работами здесь

Применение несколько фильтров оновременно
Вопрос наверное часто задаётся, я поискал но как то не нашёл ответа. Помогите написать код или подскажите в какой теме посмотреть....

Применение двух и больше фильтров сразу
Народ, возможно ли применение сразу нескольких фильтров ? К примеру, по году и месяцу? Выходит только по одному из параметров.. подскажите...

Группировка фильтров
Повторно обращаясь за помощью. Поручили сделать базу с сотрудниками. Access только начал изучать, а время поджимает, начальство нервничает....

Создание фильтров для БД
Здравствуйте, подскажите, пожалуйста, как на представленном интерфейсе приложения по управлению базой данных туристического агентства...

Привязка фильтров
Здравствуйте. До этого я не разрабатывал на питоне и вообще я не программист :( Вообщем суть в том, что есть программа с открытым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru