Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
1

Работа с байтами

17.08.2017, 21:14. Показов 6611. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Решил сделать никому не нужную и бесполезную программу, суть которой - хранение информации в виде изображения. Каждый пиксель может хранить 4 байта (Прозрачность, красный, зеленый и синий цвет). Но у меня возникла проблема:

Байт в C# - переменная, которая может иметь значение от 0 до 255. Но я видел, что байт может хранить и какие то странные сочетания букв и цифр. Что это вообще такое? Мне для работы с цветом пикселя нужны только значения от 0 до 255.
Т.е. мне так же и с помощью классов BitConverter и Encoding надо получать байты с вышеуказанным диапазоном.

Даже не знаю с чего копать, с байтами встречался только при работе с сокетами.

Спасибо за помощь заранее!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2017, 21:14
Ответы с готовыми решениями:

Работа с бинарными байтами
Нужно организовать чтение бинарных байтов (типу 01011101 кто не знал) из большого файла и запись их...

Работа с UTF байтами
Здравствуйте! Я сейчас переписываю небольшую утилитиу с AS3 на C# с которым дел имел не особо...

Работа с байтами
Добрый вечер.подскажите пожалуйста самый рациональный способ перевода двух байтов. например у меня...

Работа с байтами в С++
В каком виде лучше работать с байтами? В виде целочисленных типов , либо возможно unsigned char ? В...

24
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
18.08.2017, 00:33 2
Лучший ответ Сообщение было отмечено Jesterru как решение

Решение

Jesterru,
Цитата Сообщение от Jesterru Посмотреть сообщение
Но я видел, что байт может хранить и какие то странные сочетания букв и цифр. Что это вообще такое?
Возможно речь о шестандецитиричных значениях. 17810=B216=10110102.

Цитата Сообщение от Jesterru Посмотреть сообщение
Т.е. мне так же и с помощью классов BitConverter и Encoding надо получать байты с вышеуказанным диапазоном.
Получай. В чем проблема? Байт это всегда байт - т.е. число в диапазоне 0..255 - независимо от того кто его вернул.
1
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
18.08.2017, 03:36 3
Лучший ответ Сообщение было отмечено Jesterru как решение

Решение

Цитата Сообщение от Jesterru Посмотреть сообщение
Но я видел, что байт может хранить и какие то странные сочетания букв и цифр.
Это представление байта в шестнадцатеричной системе — для удобства в некоторых ситуациях.
Но представление — оно и есть представление, просто способ записи значения "на бумаге".
25510 = 0xFF16 = 111111112 = двести пятьдесят пять.
Представлено (написано) по-разному, а значение одно и то же.
Вот байт — он хранит значение, а то, как это значение выведено на монитор, дело десятое.
1
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,597
18.08.2017, 04:57 4
Jesterru, мне кажется или в прошлой теме тебе объяснили, что не пиксель байты хранит, а байты пиксель? И в зависимости от формата изображения количество байт на пиксель будет варьироваться. Я уже не говорю про всякие JPG, которые сжимают изображения с потерей качества и, соответственно, изначального содержимого изображения.
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
18.08.2017, 08:37 5
Просто ради прикола -- мне нужно записать 5 байта сплошными нулями. Как это должно выглядить?
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
18.08.2017, 08:41  [ТС] 6
Usaga,
Цитата Сообщение от Usaga Посмотреть сообщение
И в зависимости от формата изображения количество байт на пиксель будет варьироваться
Ну так я и собираюсь использовать форматы, которые не теряют качество, и имеют такой параметр, как прозрачность.

Цитата Сообщение от Usaga Посмотреть сообщение
не пиксель байты хранит, а байты пиксель
Да, я понимаю. Но как удобнее - 1 байт хранит 0.25 пикселя, или же 1 пиксель хранит 4 байта?

Добавлено через 2 минуты
Wolfdp, 5 байт? Если использовать png, то тогда 1 пиксель будет полностью прозрачным, а у 2го пикселя один из параметров будет 0 (Предположим, что прозрачность будет использоваться первой, тогда все эти 2 пикселя будут прозрачными. Но все зависит от того, какой формат изображения вы используете)
0
Wolfdp
18.08.2017, 08:44
  #7

Не по теме:

Цитата Сообщение от Jesterru Посмотреть сообщение
1 байт хранит 0.25 пикселя
http://bash.im/quote/402795

1
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,597
18.08.2017, 08:45 8
Jesterru, можно спросить зачем вообще это занятие нужно? Чего вы добиться пытаетесь?
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
18.08.2017, 08:46 9
Цитата Сообщение от Jesterru Посмотреть сообщение
Если использовать png, то тогда 1 пиксель будет полностью прозрачным, а у 2го пикселя один из параметров будет 0
И чем это будет отличатся от 6 байт с нулями?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,597
18.08.2017, 08:46 10
Jesterru, можно спросить зачем вообще это занятие нужно? Чего вы добиться пытаетесь?
Цитата Сообщение от Jesterru Посмотреть сообщение
1 байт хранит 0.25 пикселя
Это зависит от "глубины" цвета - количества бит на компоненту цвета пикселя.
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
18.08.2017, 08:54 11
Usaga, насколько я понял, взять байты и файла, подсчитать сколько пикселей получится, засунть в них байты из файла, и посмотреть что из этого получится.

Jesterru, я вообще пытаюсь намекнуть, что во-первых сам параметр пикселя не особо делим под байты, во-вторых изображение имеет ширину*длину. Почему из исходного файла в 300 байт должна получится картинка 10*10, а не скажем 4*25? И очередность заполнения будет слева направо по рядам, или снизу вверх по столбцам?
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
18.08.2017, 09:02  [ТС] 12
Wolfdp, В том то и дело - ничем
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,597
18.08.2017, 09:02 13
Wolfdp, или "спрятать" данные в альфа-слое изображения)))
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
18.08.2017, 09:07  [ТС] 14
Usaga, Я исследую C# а в частности WinForms. Просто вот мне стало интересно. Но зачем искать такие программы (Которых в интернете, наверное, и нет), если можно сделать самому? И вот при работе с этой программой я наконец понял всю суть байтов, еще хочу на этом форуме задать 1 вопрос, по поводу, хм, матриц наверное, с которыми я никогда не работал.
Все, что я делаю - исследование языка/научный интерес

Добавлено через 1 минуту
Wolfdp, По рядам. Пользователь сам выбирает размер и формат изображения
0
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
18.08.2017, 09:11 15
Лучший ответ Сообщение было отмечено Jesterru как решение

Решение

Цитата Сообщение от Jesterru Посмотреть сообщение
Решил сделать никому не нужную и бесполезную программу, суть которой - хранение информации в виде изображения.
Вот тут человек прячет информацию в картинках с котами, называя это "котфускацией". Шоб враги не догадались!
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
18.08.2017, 09:12  [ТС] 16
Цитата Сообщение от Usaga Посмотреть сообщение
"спрятать" данные в альфа-слое
Кстати, это идея. Например изменять альфа канал в таком диапазоне, который незаметен человеческому глазу. Например, изменение альфы в диапазоне 251-255. Выходит, что один пиксель будет хранить 1/64 байта. Для хранения 1 байта потребуется 64 пикселя. Изображение 512х512 будет хранить 4 кб данных. Очень низкая плотность, но возможность то есть.
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,597
18.08.2017, 09:19 17
Цитата Сообщение от Jesterru Посмотреть сообщение
но возможность то есть.
Как и сходить на стол "по-большому" Польза строго такая же

Вы лучше реализуйте какой-нибудь алгоритм сжатия типа LZW или Haffman или ещё что-нибудь в таком духе. Это намного полезнее будет. И с байтами поработаете и поймёте принцип действия некоторых существующих вещей. А так выглядит как пустая трата времени под соусом "поучиться".
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
18.08.2017, 09:28 18
Цитата Сообщение от Jesterru Посмотреть сообщение
Пользователь сам выбирает размер
программа стала еще унылей. 3571 к примеру является простым числом, вы сможете для него создать только картинку в один пиксель высотой и как два монитора шириной.

Цитата Сообщение от Jesterru Посмотреть сообщение
формат изображения
Вам придется использовать фиксированое количество цветов, как в gif. Смотрите, если вы привяжетесь к класической RGB, то входные данные должны быть кратны трем, иначе недостающие цвета нечем будет заполнять, и у вас будет фигня что 5 байтов заполненые нулями будут равны 6 байтам заполнены темиже нулями. При использовании словарю у вас один байт соответствует одному цвету. Да, вы теряете в глубине, но полностью отвязываетесь от кратности.

Самый простой вариант формирования значений на лету
C#
1
2
3
4
5
byte b = 1;
var a = (b >> 6) & 3;
var r = (b >> 4) & 3;
var g = (b >> 2) & 3;
var b = b & 3;
Лучше создать словарь.

Цитата Сообщение от Jesterru Посмотреть сообщение
исследую C# а в частности WinForms.
вы страдаете непонятно чем. В изучении шарпа и закриплении знаний это вам не поможет.

Добавлено через 2 минуты
Цитата Сообщение от Jesterru Посмотреть сообщение
Кстати, это идея.
Поздравляю, вы только что узнали об стегонографии.
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
18.08.2017, 09:52  [ТС] 19
Цитата Сообщение от Wolfdp Посмотреть сообщение
и у вас будет фигня что 5 байтов заполненые нулями будут равны 6 байтам заполнены темиже нулями
Если использовать для кодировки Encoding, то все привычные символы будут иметь значение, отличное от нуля.

Цитата Сообщение от Wolfdp Посмотреть сообщение
вы страдаете непонятно чем. В изучении шарпа и закриплении знаний это вам не поможет.
Ну, как минимум я чуть больше узнал о байтах. Польза есть. А "насильно учить" себя - тоже не вариант. Что приходит в голову, то и делаю. Всегда встречаюсь с тем, чего не знаю. И всегда получаю новые знания

Добавлено через 15 секунд
Цитата Сообщение от Wolfdp Посмотреть сообщение
программа стала еще унылей. 3571 к примеру является простым числом, вы сможете для него создать только картинку в один пиксель высотой и как два монитора шириной.
Есть варианты, как осуществить формирование размера, по пропорциям не превосходящий n : k ?
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
18.08.2017, 10:10 20
Цитата Сообщение от Jesterru Посмотреть сообщение
Есть варианты, как осуществить формирование размера, по пропорциям не превосходящий n : k ?
Учитывая что вы планируете внедрять избыточность на основе Base64, можно доводить до n*k темиже "пустыми" пикселями.
0
18.08.2017, 10:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2017, 10:10
Помогаю со студенческими работами здесь

Работа с байтами =)
Мне вот надо реализовать такую штуку: в листбоксе список файлов, нужно их вписать в один файл так:...

Работа с байтами из FileStream.
Помогите пожалуйста составить код. Нужно при помощи FileStream считывать файл и параллельно, над...

Работа с байтами клавиатуры
Проверить нажата ли клавиша CTRL, если нажата то вычислить А=(0,25+х^2)/(x+1), иначе A=131h. X=2....

Работа с битами и байтами
Можете пожалуйста подсказать почему у меня результат, даже маленькое число при выводе в двоичной...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru