Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Ребят, помогите пожалуйста разобраться с кодом, я новичок в с++ поэтому не до конца все понимаю. Данная функция реализует работу с буфером изображения. Сколько цветов имеет изображение, какова его ширина в пикселях. Я не могу понять действия после условия. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 06:08 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
burrundukСколько цветов имеет изображениемогу ошибаться, но вроде 2 burrundukкакова его ширина в пикселяхVERTEX_width * 8 точек burrundukЯ не могу понять действия после условия. для начала вот эта строчка: Код: plaintext 1. если её расписать по битам, это 10000000 x&7 - это отсечение х, если оно больше семи (т.е. тут надо заметить, что 7 это 111, и поэтому x&7 сработает) после того, как разобрались с x, мы двигаем 10000000 вправо, т.е. это, получается, координата х картинки шириной в 8 пикселов. Если, например, х = 2, то будет 00100000. Далее, с - признак того, ставим мы точку или стираем. условие if(c) будет true если с != 0. Возможно логичнее было бы объявить параметр функции как bool c, но фиг знает... x/8 - сдвиг в Buff с учётом того, что в x передаётся координата в битах. Соответственно, в байтах будет x/8 y*VERTEX_width - сдвиг в Buff с учётом координаты y. Т.е. одна строка картинки - VERTEX_width байт. * - получение переменной (куска памяти) по указателю Buff |= mask - битовое сложение(логическое ИЛИ) с mask. Т.е. если в *(Buff+x/8+y*VERTEX_width) было 00000100, а в mask 00100000, то результатом будет 00100100 &=~mask инвертирование маски и умножение (логическое И) т.е. если *(Buff+x/8+y*VERTEX_width) было 10101010, а в mask 00100000, то ~mask = 11011111, а результат будет 10001010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 06:35 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
CEMbVERTEX_width * 8 точек почему? чет не допер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 07:21 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
burrundukпочему? чет не допер y умножается на VERTEX_width - т.е. VERTEX_width это число байт на одну строчку картинки, ок? далее, в по x&7 шифтом двигается 1 бит (в 0x80) чтобы получить позицию точки внутри байта. Т.е. получается 8 точек на байт. Итого VERTEX_width * 8 - ширина всей картинки. х - это (в общем случае) 32 битное целое. Первые 29 битов (x/8) - это позиция точки(байта) в буфере, последние 3 бита(x&7) - позиция точки в байте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 08:41 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
CEMb, а цвет же задается с помощью mask как я понял? если да то почему 2 цвета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 08:56 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
burrundukа цвет же задается с помощью mask как я понял? если да то почему 2 цвета?цвет задаётся с помощью третьего параметра функции - c два цвета, в смысле: есть точка, нет точки. условие if(c) как раз или ставит точку, если c не равно нулю, или убирает точку, если с == 0 mask задаёт позицию точки (бит) в байте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 11:17 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
burrundukCEMb, а цвет же задается с помощью mask как я понял? если да то почему 2 цвета? не заморачивайся по этой древности скорее всего это у тебя исходники от драйвера к 16-цветной VGA 640*480, выводимый пиксель задаётся битом, цвет скидывается отдельно, через что уже не помню ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 11:17 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)не заморачивайся по этой древности монохромные изображения уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 11:26 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Изопропилkealon(Ruslan)не заморачивайся по этой древности монохромные изображения уже отменили? нет, точно так же как это может быть и палитра на два цвета но скорее всего это VGA буфер, вот такая вот аппаратная магия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 11:36 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)но скорее всего это VGA буфер, вот такая вот аппаратная магия нет разницы буфер в памяти или в VGA адаптере. какая ещё аппаратная магия - какой ещё разумный способ установки бита в в двумерном битовом массиве? PS VERTEX_width - странный идентификатор, обычно stride или pitch употребляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 11:48 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)burrundukCEMb, а цвет же задается с помощью mask как я понял? если да то почему 2 цвета? не заморачивайся по этой древности скорее всего это у тебя исходники от драйвера к 16-цветной VGA 640*480, выводимый пиксель задаётся битом, цвет скидывается отдельно, через что уже не помню так дело в том что сказали именно эту функцию посмотреть и разобраться что к чему) спасибо всем) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 12:08 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
ИзопропилPS VERTEX_width - странный идентификаторда уж... векторами пахнет о_О Вертекс, вообще говоря - точка. Ширина точки... о_О или я что-то не так понял?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 12:17 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Изопропилкакая ещё аппаратная магия - какой ещё разумный способ установки бита в в двумерном битовом массиве? выставляешь бит, а в самом адаптере меняется цвет изменённых пикселей на указанный в регистре - вот такая вот магия PS: я думаю вопрос бы разрешил код getpixel ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 15:21 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
CEMbИзопропилPS VERTEX_width - странный идентификаторда уж... векторами пахнет о_О Вертекс, вообще говоря - точка. Ширина точки... о_О или я что-то не так понял?... гугл говорит, что Java-кодеры использовали этот идентификатор в качестве stride kealon(Ruslan)PS: я думаю вопрос бы разрешил код getpixel ... его тоже кто-то написать должен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 15:24 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Изопропилkealon(Ruslan)PS: я думаю вопрос бы разрешил код getpixel ... его тоже кто-то написать должен логика подсказывает, что надо поискать там же откуда buf_setpixel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:07 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), готов принять гипотезу о VGA-адаптере, но не вижу отличий от работы с монохромной текстурой в памяти(которую в последующем можно покрасить в пару цветов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:17 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
У VGA - кучка извратных режимов для работы с четырьмя плоскостями. Причина извратов - настоятельная потребность уместить кадровый буфер в 64Кб. Максимум - в 128Кб. P.S. LFB у VGA тоже был, но штатно это 320x200x256 (байт на пиксель). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:22 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovУ VGA - кучка извратных режимов для работы с четырьмя плоскостями.Это было не в VGA, а в EGA. Basil A. SidorovP.S. LFB у VGA тоже был, но штатно это 320x200x256 (байт на пиксель).Это как раз единственный собственный режим VGA. Все остальные - унасаледованы от текстовых дисплеев, CGA и EGA. А с чего это вы вспомонили о древнем железе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:33 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Изопропилгугл говорит, что Java-кодеры использовали этот идентификатор в качестве strideа что такое stride? Что-то гугл мне не помог :( Кстати, я тут припоминаю: маска в иконках делается ровно такой вот побитовой монохромной картинкой. Там как раз две битмапы, одна цветная, другая точечная. В своё время делал парсер инфы из иконок и курсоров. В век 32-битных картинок с альфой про это уже никто просто не помнит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 05:08 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
CEMb, полноценные многомерные массивы и вырезки из них остались нынче только в фортране.... stride можно найти в std::valarray (точнее - std::slice, std::gslice ) http://www.cplusplus.com/reference/valarray/gslice/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 09:20 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
CEMbВ век 32-битных картинок с альфой про это уже никто просто не помнит монохромные изображения никуда не делись 32-битные картинки с альфой - тож разные бывают разрядность каналов не обязана быть одинаковой для всех каналов GL_RGBA8 - да - это типовой случай - по 8 бит на канал но есть ещё GL_RGB10_A2 - по 10 бит на RGB и 2 бита на альфу и GL_RGB5_A1 - по 5 бит на канал и 1 бит на альфу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 09:31 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
White OwlЭто было не в VGA, а в EGAЭто было у обоих. Причём у VGA были дополнительные извраты, которых не было у EGA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 16:36 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovWhite OwlЭто было не в VGA, а в EGAЭто было у обоих. Причём у VGA были дополнительные извраты, которых не было у EGA.VGA полностью обратно совместим с EGA. Единственным новшеством в VGA был 256-и цветный режим с размером экрана 320*200. Все остальные режимы унаследованы. 16-и цветные от EGA и 4-х цветные от CGA. После VGA, было изобретено несколько дестяков вариантов SVGA и XVGA. Но примерно в то-же время наконец вышли Window95 и OS/2 которые ввели в обиход понятие "видео драйверов" и больше с железом напрямую никто не работал (ну кроме тех кто пишет эти драйвера). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 18:14 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
White OwlЕдинственным новшеством в VGA был 256-и цветный режим с размером экрана 320*200У меня есть печатное издание актуальных годов и я могу обоснованно утверждать, что вы ошибаетесь. В частности, кроме физических различий, появились и дополнительные регистры и дополнительные "плоскостные" режимы, программируемые этими самыми регистрами. P.S. "Физичиеские различия": аналоговый выходной сигнал, 720 точек по горизонтали и 400/480 - по вертикали, другие частоты развёрток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 18:24 |
|
||
|
разбор кода
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovWhite OwlЕдинственным новшеством в VGA был 256-и цветный режим с размером экрана 320*200У меня есть печатное издание актуальных годов и я могу обоснованно утверждать, что вы ошибаетесь.А у меня есть личный опыт работы на CGA, EGA и VGA тех годов. А вот печатные издания не выжили.... Впрочем, они никогда не были главным источником знаний по низкоуровневой работе с железом. В те времена была более актуальна база знаний Ральфа Брауна. Клиент к ней садился резидентом и вызвался по хот-кею. Дай угадаю, у тебя книжка Фролова? :) Он довольно много написал и наиздавал в 90-х, но его книги никогда не пользовались успехом - слишком уж он в них скакал галопом по европам и вместо настоящих справочников и/или учебников писал научпоп. Basil A. SidorovВ частности, кроме физических различий, появились и дополнительные регистры и дополнительные "плоскостные" режимы, программируемые этими самыми регистрами.Увы, но это уже расширения для оригинального VGA, так называемые SVGA. Единственный плоскостной режим был режим номер 13h. Basil A. SidorovP.S. "Физичиеские различия": аналоговый выходной сигнал, 720 точек по горизонтали и 400/480 - по вертикали, другие частоты развёрток.Да, в принципе можно было загнать видео-карту в такие режимы, но в том-то и дело, что это уже "extended" режимы. Они существовали за счет того что сама IBM (которая изобрела и стандартизировала VGA) самостоятельно изготовила не так уж много плат. В основном их производили разные другие компании по лицензии от IBM (а иногда и без лицензии). И эти режимы не были официальными, никто не гарантировал что клиентская машина включится в таком режиме и сможет работать не сжигая видео-плату и/или монитор. Настройку расширений придумали намного позже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 00:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39479458&tid=2018138]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 16ms |
| total: | 291ms |

| 0 / 0 |
