Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Графика (псевдотонирование)

17.09.2020, 11:19. Показов 2261. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Познакомиться с темой можно здесь

Коротко - обработка многоцветного изображения для представления его в двух цветах с сохранением визуальной понятности. Лично для меня тема появилась когда стал пользоваться лазерным гравёром, он достаточно простой и по сути работает без полутонов, поэтому предварительная обработка изображения необходима, а стандартная утилита делает это просто отвратительно, а грузить фотошоп, играться, сохранять и т.д. - не наш путь. Поэтому хочу сделать свою модификацию алгоритма, поэтому хотелось бы обрабатывать изображение на C#, но не знаю как это делать лучше и быстрее. Сориентируйте по библиотекам и их использованию, нужна работа с пикселами.
Миниатюры
Графика (псевдотонирование)   Графика (псевдотонирование)  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2020, 11:19
Ответы с готовыми решениями:

Chart - диаграмма: изменить точность делений графика, установить центр графика в (0,0)
Создал диаграмму (все прекрасно считается точки расставляются), но есть проблемыЖ 1. В случае диаграммы - "Спектр амплитуд",...

Построение графика графика квадратичной функции
Как построить график квадратичной функции? Построил только простую параболу, как ее сдвигать? int ixPrev = -1, iyPrev =...

Рисование графика: обработка новых входящих данных и движение графика на форме
Подскажите каким способом можно вывести график частью главного окна программы, при чем график получает данные *в живую* с устройства по...

5
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.09.2020, 23:15
Лучший ответ Сообщение было отмечено belalugoci как решение

Решение

Цитата Сообщение от belalugoci Посмотреть сообщение
псевдотонирование
Самый универсальный и быстрый способ - использование готовых матриц дизеринга.
Для лазерного гравера хорошо подходит такая матрица:
Название: Dithering64x64.png
Просмотров: 82

Размер: 7.0 Кб

Далее перебираем пикселы, сравниваем яркость исходного изображения с матрицей. Если яркость больше чем яркость пиксела матрицы - ставим белый пиксел, иначе черный.

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
    internal static class Dithering
    {
        internal static Bitmap Process(Bitmap bmp)
        {
            //create result
            var result = new Bitmap(bmp.Width, bmp.Height);
            //load dithering matrix
            var ditheringMatrix = Resources.Dithering64x64;
 
            //do dithering
            //create wrappers
            using (var res = new ImageWrapper(result))
            using (var dith = new ImageWrapper(ditheringMatrix))
            using (var source = new ImageWrapper(bmp, true))
            {
                //foreach point
                foreach (var p in source)
                {
                    //get pixel from source image
                    var pixel = source[p].GetBrightness();
                    //get pixel from dithering matrix
                    var dithPixel = dith[p.X % dith.Width, p.Y % dith.Height].GetBrightness();
                    //compare
                    res[p] = pixel >= dithPixel ? Color.White : Color.Black;
                }
            }
 
            return result;
        }
    }
Результат:
Вложение 1179378

При желании, можно использовать другую матрицу, соответственно результат будет другой.
Вложения
Тип файла: zip WindowsFormsApp1.zip (803.4 Кб, 35 просмотров)
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.09.2020, 23:21
Результат:
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
18.09.2020, 05:44  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
использование готовых матриц дизеринга
Паттерн (шаблон)? Спасибо за реализацию. Будет от чего отталкиваться.
Пока у меня идея в том, чтобы в местах концентрации темных пикселей вероятность появления черной точки делать выше чем белой, то есть условно за пикселом X,Y идёт некая кисть (X-8,Y-8),(X+8,Y+8) которая и позволяет изменить цвет пиксела по X,Y в зависимости от состава пикселей во всей кисти. Не хочется тонировать светлые участки чередующимися точками, но и не хочется делать черно-белое изображение например по граничному значению в 127.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
18.09.2020, 05:52  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
использование готовых матриц дизеринга
скачал программу из статьи, там есть параметр dithering amount, вот он примерно то, о чем я говорю и делает. См.картинки.
Миниатюры
Графика (псевдотонирование)   Графика (псевдотонирование)  
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
18.09.2020, 09:30  [ТС]
Вопрос по коду:
Цитата Сообщение от Storm23 Посмотреть сообщение
var ditheringMatrix = Resources.Dithering64x64;
картинку с шаблоном нужно поместить в ресурсы и назвать Dithering64x64?

Цитата Сообщение от Storm23 Посмотреть сообщение
internal static Bitmap Process(Bitmap bmp)
откуда там берётся bmp?

Добавлено через 3 минуты
Цитата Сообщение от Storm23 Посмотреть сообщение
using (var res = new ImageWrapper(result))
Цитата Сообщение от Storm23 Посмотреть сообщение
return result;
выделили место в памяти и сделали возврат, а кто получатель?

Добавлено через 1 час 42 минуты
Цитата Сообщение от belalugoci Посмотреть сообщение
Вопрос по коду:
пардон, с телефона не увидел что к сообщению приложен код.

Добавлено через 31 минуту
Цитата Сообщение от Storm23 Посмотреть сообщение
Самый универсальный и быстрый способ - использование готовых матриц дизеринга.
поигрался с матрицей, вполне сносный дизеринг получается, спасибо за наводку, странно что в изучаемых статьях об этом не говорят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2020, 09:30
Помогаю со студенческими работами здесь

Шкала графика Chart Control - Сделать так, чтобы значения графика были с 2 знаками после запятой
Здравствуйте! У меня такая проблема: В базе данных есть числовые данные, на основе которых рисуется график Подскажите, пожалуйста,...

Построение графика графика квадратичной функции
Как построить график квадратичной функции? Построил только простую параболу, как ее сдвигать? int ixPrev = -1, iyPrev =...

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

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

Совмещение поточечного графика и графика построенного функцией на отрезке
Есть некий массив array1 = {...} и func = y /. NDslove По отдельности строю так: Plot и ListLogPlot Как их совместить? ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru