Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
23 / 23 / 6
Регистрация: 11.12.2011
Сообщений: 300

Работа с пикселями

03.03.2013, 13:55. Показов 7268. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
загружаю рисунок в pictureBox, беру например пиксель по координатам 10, 10 . А вот как его изменить никак не пойму.

Делаю так:
C++
1
2
3
Color a = battlefield->GetPixel(10, 10);
unsigned char b = a.G + 1;
a.R = b;
в итоге получаю ошибку
C++
1
Ошибка    1   error C2039: set: не является членом "System::Drawing::Color::R"    d:\multimedia\visual studio 2010\projects\balloon\balloon\Form1.h   208
Я собираюсь сделать взять квадратную матрицу пикселей и немного их видоизменить (например +1). И потом записать обратно в ту область откуда взял. по идее картинка должна видоизмениться в том квадрате.

Может есть какая-то функция которая уже реализована и делает почти тоже - искажает/видоизменяет заданый кусок рисунка.

Уже 2 часа гуглю, а толку никакого
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2013, 13:55
Ответы с готовыми решениями:

работа с пикселями CBitmap
Можно ли как либо в CBitmap получать составляющие пикселя зная X и Y, всмысле красную, зеленую, и синюю составляющие. И менять их значения?...

Работа с пикселями в pictureBox
Я не давно начал работать в среде ms visual c++, и у меня возник вопрос, допустим у меня в pictureBox есть изображения, как мне обратится к...

работа с пикселями
Помогите с кодом. Требуется загрузить любое изображение в формате BMP, далее изображение делится по полам по горизонтали, в верхней части...

8
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.03.2013, 14:17
skident, нарисовать точку, если Вы об этом, можно нарисовав линию (методы Draw из Graphics), где начало и конец, - данная точка. Я понимаю как это звучит, но сам бы хотел знать, как по другому сделать.
0
23 / 23 / 6
Регистрация: 11.12.2011
Сообщений: 300
03.03.2013, 14:55  [ТС]
Нет я немного не о том. точку нарисовать я могу. Просто я выдираю из рисунка пиксель в переменную типа Color. Потом хочу как-то видоизменить данный пиксель (прибавить к значениям R, G, B какое-то значение), но вот присваивание не прокатывает. То есть я вроде как-бы могу нарисовать пиксель какого-то определенного цвета, но всюду на рисуноке будет рисоваться именно этот пиксель одного цвета. А я хочу, чтобы новый пиксель отличался от исходного, например на один тон (то есть чучуть светлее либо темнее).

и вот в данной конструкции a.R += 1; ругается. Походу используется инкапсуляция и я не могу присвоить какое-то значение в обход сеттеру. А как использовать сам сеттер, я нигде найти не могу.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.03.2013, 15:02
skident, для рисования линии тоже нужно устанавливать значение типа System:: Drawing::Color. Вы располагаете данными целого типа, но ведь каналы Color это тоже (внутренне) целые. Вот и смотрите, как получить нужный Вам Color. Я сейчас не помню, можно ли модифицировать канал, простой арифметической операцией или потребуется конструктор с целыми аргументами или явное приведение. Позже посмотрю и скажу. Но если сами сможете, - отпишите.
0
23 / 23 / 6
Регистрация: 11.12.2011
Сообщений: 300
03.03.2013, 15:09  [ТС]
Ну вот все же нашел кое-что, но пока не срабатывает, хотя судя по выводу в MessageBox и, то что компилятор не ругается, то уже есть сдвиги

C++
1
2
3
4
Color c = battlefield->GetPixel(10, 10);
Byte rgb = (Byte)(0.3 * c.R + 0.59 * c.G + 0.11 * c.B);
MessageBox::Show(rgb.ToString());
battlefield->SetPixel(10, 10, Color::FromArgb( rgb ));
То есть по коду выходит так: стягиваю атрибуты пикселя 10, 10. умножаю их на какой-то там коэффициент и нахожу сумму. ну и записываю и изменяю атрибуты данного пикселя. Но пиксель не перекрашивается.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.03.2013, 15:17
Цитата Сообщение от skident Посмотреть сообщение
Ну вот все же нашел кое-что, но пока не срабатывает, хотя судя по выводу в MessageBox и, то что компилятор не ругается, то уже есть сдвиги

C++
1
2
3
4
Color c = battlefield->GetPixel(10, 10);
Byte rgb = (Byte)(0.3 * c.R + 0.59 * c.G + 0.11 * c.B);
MessageBox::Show(rgb.ToString());
battlefield->SetPixel(10, 10, Color::FromArgb( rgb ));
То есть по коду выходит так: стягиваю атрибуты пикселя 10, 10. умножаю их на какой-то там коэффициент и нахожу сумму. ну и записываю и изменяю атрибуты данного пикселя. Но пиксель не перекрашивается.
Ну в общем направление верное. Два статических метода в классе Color:
Int32 Color::ToArgb() //получить целое соответствующее цвету
Color Color::FromArgb( Int32 )//Установить цвет используя целое
1
23 / 23 / 6
Регистрация: 11.12.2011
Сообщений: 300
03.03.2013, 15:26  [ТС]
Упс, забыл еще перерисовать на холст рисунок

C++
1
gr->DrawImage(battlefield,pnt);
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
03.03.2013, 15:28
C++
1
2
3
4
5
6
7
8
9
Color currentColor = battlefield->GetPixel( 10, 10 );
 
         unsigned char green = 0;
 
        currentColor.G < 255 ? green = currentColor.G + 1 : green = 255;
 
         Color newColor = Color::FromArgb( currentColor.R, green, currentColor.B );
 
         battlefield->SetPixel(  10, 10 , newColor );
2
23 / 23 / 6
Регистрация: 11.12.2011
Сообщений: 300
03.03.2013, 16:16  [ТС]
IGPIGP, MrCold спасибо вам за помощь. На пару тонов затемнять/осветлять получается. Теперь буду что-то думать как сделать искажение части рисунка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2013, 16:16
Помогаю со студенческими работами здесь

Работа с пикселями в C#
Здравствуйте. Имеется приложение на C#, которое берет изображение с веб-камеры в PictureBox. На форму поставил компонент ListView, в...

Работа с пикселями
Я только осваиваюсь с графикой, но пока ниче не получается...Если Вам не трудно, то помогите с этой задачей: Общее условие:...

c# работа с пикселями.
бешеный проблема. Очень надо добить эту программу. Тут работа с изображениями, суть в том, что здесь я хочу запустить цикл по всем пикселям...

Работа с пикселями
Возможно ли работать с пикселями в С++? Сравнение цветов пикселей требуется Добавлено через 2 минуты Кратко суть программы: ...

Работа с пикселями
1) Згенеруваты выпадкови дани що видповидають умови задачи и зберегты в текстовому редактори 2) Килькисть точок выбыраеться вид 10 до...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru