Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64

Пиксель

16.10.2011, 14:20. Показов 2052. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю с картинкой формата .bmp, глубина цвета 24.
Как разбить на пиксели и прочитать цвет каждого пикселя уже знаю.
Но тут у меня появилось несколько вопросов:
1) как представить цвет(значение записано в int) в bits. Типа 255 это 11111111
2) как обратится в этом bits к определенному розряду и допустим заменить его.
3) как вернуться из bits в int
4) как представить string в 0 и 1 (сделать масив).
Вопросов много, если кто не ленится то напишите. Ссылки на готовые програмы по сеганографии не давайте. Я новичек, хочу своими руками.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2011, 14:20
Ответы с готовыми решениями:

Зарисовать 1 пиксель
Нужно закрасить 1 пиксель, делаю так. Однако закрашивается 2*2 g.DrawRectangle(myPen, new Rectangle(0,0, 1, 1)); как можно исправить?

Не добавляет пиксель на картинку
Есть такой код, он должен добавлять пиксель на картинку, но по какой-то неведомой причине он этого не делает, объясните пожалуйста в чём...

Найти пиксель в BitMap
Доброго времени суток. У меня есть изображение, в котором мне нужно найти пиксель определенного цвета и получить его координаты. Я сделал...

9
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.10.2011, 14:39
1) как представить цвет(значение записано в int) в bits. Типа 255 это 11111111
Представление - это не более чем отображение. Числа хранятся в двоичном формате.
C#
1
string binary = Convert.ToString(ineger, 2);
2) как обратится в этом bits к определенному розряду и допустим заменить его.
Используйте побитовые операторы &, |, ^.
Например:
C#
1
2
int i = 0; // Все биты имеют значение 0
int j = i & 0x24; // Переключить 3-й и 6-й биты (с наименее значимого) на единицу
Цитата Сообщение от Stipashka Посмотреть сообщение
3) как вернуться из bits в int
C#
1
int number = Convert.ToInt32("101011101", 2);
Но при использовании вышеприведенного примера это не потребуется.

C#
1
4) как представить string в 0 и 1 (сделать масив).
Вопрос не понял. Представить значения байт в двоичной системе или что?
0
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 33
16.10.2011, 14:41
По четвёртому пункту. у строковой переменной есть метод ToArray(), кажется. Так можно перевести строку в массив символов и далее с ними оперировать.
0
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
16.10.2011, 15:15  [ТС]
в четвертом пункте надо сделать из строки масив ноликов и единичек.

В первом пункте: мне нужно не переменную стринг а именно bits

Если что то глупое спрашиваю - извените.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.10.2011, 15:19
Цитата Сообщение от Stipashka Посмотреть сообщение
в четвертом пункте надо сделать из строки масив ноликов и единичек.
Как выглядит строка?

Цитата Сообщение от Stipashka Посмотреть сообщение
В первом пункте: мне нужно не переменную стринг а именно bits
Смотрите мой ответ на второй вопрос.
0
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
18.10.2011, 22:28  [ТС]
а как узнать значение самого младшего бита в int, и если он, например 1 то заменить на 0
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.10.2011, 22:42
Цитата Сообщение от Stipashka Посмотреть сообщение
а как узнать значение самого младшего бита в int, и если он, например 1 то заменить на 0
C#
1
if ((value & 1) == 1) value &= ~1;
Вы вообще с двоичной логикой знакомы? Проще объяснить будет, если да.
0
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
18.10.2011, 23:21  [ТС]
если можно то в кратце на примере числа int = 3
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.10.2011, 23:47
Stipashka
У нас имеются операторы двоичной логики:
| - ИЛИ (выражение истинно, если хотя бы одно из значений истино)
& - И (выражение истинно, если оба значения истинны)
^ - Исключающее ИЛИ (выражение истинно, если одно значение истинно, но не оба)
~ - НЕ (значение меняется на противоположное)

Есть еще операторы << и >> - сдвигают все биты числа влево и вправо соответственно.

Тут как в обычной булевой логике, только с битами:

Таблица значений для оператора ИЛИ:
x y x|y
0 0 0
0 1 1
1 0 1
1 1 1

Для И:
x y x&y
0 0 0
0 1 0
1 0 0
1 1 1

Для исключающего ИЛИ:
x y x^y
0 0 0
0 1 1
1 0 1
1 1 0

Для НЕ:
x ~x
0 1
1 0

Итак, число 3.
В двоичной системе счисления оно имеет вид 0011
Если в коде оно будет представлено в виде целого числа (int), то всего в нем будет 32 бита:
0000 0000 0000 0000 0000 0000 0000 0011

Используя побитовые операторы, мы можем манипулировать отдельными битами числа.
Например, нам надо сделать третий (я веду счет с младшего бита) бит единицей.
Для этого можно приспособить оператор ИЛИ (значение равно единице, если хотя бы один из аргументов равен единице):
0011 (3 в десятичной)
ИЛИ
0100 (4 в десятичной)
=
0111

То есть все биты двух чисел сравниваются друг с другом через оператор и получившееся значение записывается в результат:
0 или 0 = 0
0 или 1 = 1
1 или 0 = 1
1 или 0 = 1

То есть чтобы поставить числу третий бит в единицу, делаем следующее:
C#
1
2
int n = 3;
n = n | 4; // (0011 ИЛИ 0100)
Для краткости можно записать так:
C#
1
n |= 4;
В результате у нас получится число 7, или в двоичной системе 0111 - третий бит раве единице.

Теперь, допустим, нам надо поставить первый и второй биты на нуль.
То есть из вида 0111 сделать 0100.
Говоря иначе, нам надо оставить все биты как есть, кроме первых двух.

Для этого надо:
1. Взять число, состоящее из первых двух бит:
0000 0000 0000 0000 0000 0000 0000 0011 (3)
2. Поменять все биты на противоположные через оператор ~:
1111 1111 1111 1111 1111 1111 1111 1100
3. Сложить получившееся число с нашим (0111) через оператор &:
0000 0000 0000 0000 0000 0000 0000 0111
И
1111 1111 1111 1111 1111 1111 1111 1100

Тут происходит то же самое, что и в предыдущем примере, только с оператором И.
Результат операции И равен истине только тогда, когда оба аргумента истинны.
То есть для старших 28-и разрядов результат будет всегда 0, т.к. там 0 и 1.
Для младших четырех получается так:

0 и 1 = 0
1 и 1 = 1
1 и 0 = 0
1 и 0 = 0
Результат: 0100, первые два бита равны нулю, что и требовалось.

В коде это выглядит так:
C#
1
2
int value = 7; // 0111
value = value & ~3;
Или для краткости так:
C#
1
value &= ~3;
Суть:
для того, чтобы сделать определенные биты единицей, используем оператор | с числом, у которого все нужные биты равны единице.
Для того, чтобы сделать определенные биты нулями, используем оператор & с числом, у которого все биты равны единице, кроме нужных.

Ссылка на всякий случай: Двоичная логика
2
7 / 7 / 2
Регистрация: 23.08.2011
Сообщений: 64
19.10.2011, 00:19  [ТС]
kolorotur ОГРОМНОЕ спасибо. Уже, наверное, понял все.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2011, 00:19
Помогаю со студенческими работами здесь

Как массив байтов (1 байт на пиксель (изображение в оттенках серого) запихнуть в Bitmap и отобразить в PicterBox?
Здравствуйте! Мне понадобилось каждое входящее изображение переводить в изображение в градациях серого (256 цветов). В Bitmap, я так понял,...

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

Лишний пиксель после поворота изображения
есть исходное изображение: http://itmag.es/2TFdq проходим по нему функцией чтобы закрасить самый правый пиксель по всей высоте (рисуем...

Как создать форму 1x1 пиксель?
Поснимал все минималки, FormBorderStyle = none, итд, но форма все равно не хочет становится размером в 1x1 миксель... Как это сделать?

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru