PDA

Просмотр полной версии : BMP с 4-мя градациями серого на Speccy



CityAceE
18.03.2007, 16:34
Вот, нашёл у себя. В первом архиве программа, а во втором примеры готовых для просмотра BMP.



Если на ПЦ уменьшить размер картинки до 256х192 (или
вырезать фрагмент того же размера), а затем перевести все в
формат grayscale с 16-ю градациями серого, а потом еще и
сократить количество градаций до четырех и после чего сохранить
полученный файл в BMP, то тогда такой файл можно будет
посмотреть на Спектруме с помощью предлагаемой программы.

Вышеизложенные преобразования на ПЦ прекрасно сделает
программа XnView, которая кроме прочего еще позволяет
просматривать на ПЦ картинки со Спектрума. Программа бесплатная.
URL: http://www.xnview.com или http://perso.wanadoo.fr/pierre.g

Суть конверсии на Спектруме сводится к тому, что BMP
раскладывается на два стандартных экрана, один из которых имеет
черный и белый цвета со включенной яркостью, а второй экран -
черный и белый цвета с выключенной яркостью. При просмотре
быстрая смена экранов с частотой 25 Гц дает эффект четырех
градаций яркости, где каждая точка может иметь свою градацию.
Стоит отметить, что на Спектруме данные BMP выглядят не
совсем так, как на ПЦ. Это происходит из-за того, что на ПЦ
самый яркий цвет сильнее отличается от ближайшей к нему
градации, чем на Спектруме - на Спектруме они почти сливаются,
но это уже ограничения самого ZX.
Программа не будет работать на 48 Кб компьютерах в силу
того, что при просмотре используются два экрана.
Не стоит оценивать эффект от работы программы под
эмулятором.


Клавиши основного меню:
=======================
<1> - Загрузить BMP-файл. Файл должен быть в формате 256х192х8 с
четырьмя градациями серого, длина файла 24694 байта (97
секторов).
<2> - Конвертировать и показать загруженный BMP-файл
<3> - Показать каталог текущего диска
<4> - Выйти в BASIC

Клавиши просмотрщика:
=====================
<1> - Показать первый экран
<2> - Показать второй экран
<ENTER> - Продолжить просмотр двух экранов
<SPACE> - Выйти из просмотрщика

Список файлов:
BMP_VIEW.B - Загрузчик-интерфейс
BMP_VIEW.C - Конвертор-просмотрщик
BMP_VIEW.W - Этот текст
BMP_VIEW.H - Исходный текст BMP_VIEW.C в формате ALASM с
комментариями
EXAMPLE.С - Пример BMP для загрузки, конверсии и просмотра

(С) Станислав Юдин aka CityAceE

CityAceE
18.03.2007, 16:41
Да, забыл написать. Когда я игрался со всем этим я эксперементировал не только с чёрно-белым выводом на экран, а, например, с красно-зелёным и т.д., подвешивая смену цвета на горячие клавиши. Для некоторых картинок замена чёрного и белого на другие цвета давала более сильный эффект. Оптимальные цвета зависели от самих картинок.

Black_Cat
18.03.2007, 23:01
Градаций на Спеке должно быть не 4 а 5 :confused: .
Если условно принять чёрный=0, белый=1, яркий белый=2, то имеем комбинации:
(0+0)/2=0
(0+1)/2=0,5
(0+2)/2=(1+1)/2=1? - скорее будут незначительно отличаться => одну из двух комбинаций можно запретить к использованию, но необходимо иметь ввиду, что 1+1 относится только к пикселу, а 0+2 ко всему знакоместу.
(1+2)/2=1,5
(2+2)/2=2

diver
19.03.2007, 17:46
Black_Cat, градаций 6, т.к. 0+2 не равен 1+1 в общем случае. Но фишка в описываемом методе не в количестве градаций, а в том, что нет делений на знакоместа, то есть все 4 градации используются свободно на весь экран. А при 6 градациях конвертирование усложняется наличием знакомест.

Количество градаций обсуждалось в теме о количестве цветов (http://zx.pk.ru/showthread.php?t=505), вот результат:
http://zx.pk.ru/attachment.php?attachmentid=412&d=1111636923

ps правда обнаружил только что ошибку в 3ей таблице. 0 + 1 должны конечно давать в сумме 0,5, а не 1.

Black_Cat
20.03.2007, 20:24
фишка в описываемом методе не в количестве градаций, а в том, что нет делений на знакоместа, то есть все 4 градации используются свободно на весь экранЯ понимаю как только для пикселов (без повышенной яркости влияющей на всё знакоместо) получить 3 градации серого:
(0+0)/2=0
(0+1)/2=0,5
(1+1)/2=1
А четвёртая градация какая? Или там в чистом виде 0+1 нет, а вместо него замешаны разные комбинации цветов для получения в монохромном режиме (вывод через композит) вместо одного уровня = 0,5 , двух уровней = 0,33 и 0,67 или близких к ним?

diver
20.03.2007, 21:08
Black_Cat, так не оба же экрана с выключенной яркостью. 1ый экран с выключенной (0/Normal), а второй - со включенной (0/Bright). Сочетания:

1 градация = 0+0
2 градация = 0+Normal
3 градация = 0+Bright
4 градация = Normal+Bright

В результате пикселы градаций 2,4 включены на первом экране, а пикселы градаций 3,4 включены на втором экране. Моргаем экранами и видим 4 цвета.

Black_Cat
20.03.2007, 23:20
Ага, всёж более просто для понимания рассматривать набор возможных оттенков для целого знакоместа:
1) ((0 или 0)+(0 или 0))/2=0;
2) ((0 или 0)+(0 или 1))/2=0 или 0.5;
3) ((0 или 0)+(0 или 2))/2=0 или 1;
4) ((0 или 1)+(0 или 2))/2=0 или 0.5 или 1 или 1.5.
diver (http://javascript<b></b>:insertnick('diver');) кстати обьясни, чем не кошерно использовать композитный выход для монохромной графики? Ведь там и без гигаскрина восемь оттенков на пиксель есть? :confused: А с гигаскрином в грубом прикиде и вовсе 16 оттенков на пиксель можно получить. Дык и чего себе выкручивать руки?
Или настоящие комсомольцы не ищут лёгких путей? :)

diver
24.03.2007, 14:57
а кто сказал, что не кошерно?

Black_Cat
24.03.2007, 18:01
В чём тогда фишка использовать четыре градации полученные в гигаскрине, вместо 8ми присутствующих по умолчанию без всяких извращённых режимов?

diver
24.03.2007, 22:11
в том, что это стандартно и поддерживается у всех

Black_Cat
25.03.2007, 01:07
Стоп, ты о гигаскрине - "стандартно" или о композите? Я так понял - о гигаскрине. Это конечно довольно широко применяемый режим ввиду возможности его сугубо программной реализации, но только начиная со 128, в то время как композит даёт 8 градаций серого на любой модели. Но у меня сложилось впечатление что композитное монохромное отображение по какой-то причине относительно не пользуется популярностью. Если это так, то твоё мнение - почему?

psndcj
25.03.2007, 14:43
Извиняюсь - я не в теме =( а что такое композитный вход? можно чуть поподробнее...

Lethargeek
25.03.2007, 15:50
в том, что это стандартно и поддерживается у всех


Стоп, ты о гигаскрине - "стандартно" или о композите?

Зачем так все усложнять? Композит, не композит...
ИМХО "стандартно у всех" поддерживается выключение цветности на ТВ/монике. :D

Или тут хто-то окошки-моргушки делать собрался?

Black_Cat
25.03.2007, 17:34
а что такое композитный вход?
Композитный ВЫход на Спеке - имелось ввиду ч/белый, где все цвета замешаны в пропорции их яркостных эквивалентов серого. Более правильное отпределение композитного сигнала - это сигнал в который замешаны не только цветовые составляющие, но и синхросмесь, но тут допустимы обе трактовки, т.к. монохромные мониторы существовали в двух вариациях - с замешанными и с выделенными синхросигналами.

Зачем так все усложнять? Композит, не композит...
Вообще-то вопрос художникам я задавал не просто так, а потому, что смутно подозревал что композит не используется из-за нелинейности градаций серого в нём, о чём им лучше должно быть известно. Очень подозреваю, что применение "окошек-моргушек" вызвано именно нелинейностью композита.
ИМХО "стандартно у всех" поддерживается выключение цветности на ТВ/монике.Когда монохромный сигнал мешается внутри Спека - там по крайней мере можно подобрать весовые коэффициенты и быть "железно" уверенным какая комбинация отвечает какой яркости, а в ящике всё зависит от его настройки и бог знает правильно ли мешает цвета конкретно этот ящик. Известны примеры, когда люди писали софт ориентируясь на свой "ящик" и лишь спустя годы узнавали что он оказывается был ненастроен и на хорошо отрегулированном ящике всё выглядит мягко говоря "не так" красиво.

psndcj
26.03.2007, 19:10
спасибо за ответ!

имхо ориентироваться на чернобелый вариант цветного экрана это то же самое, что и на моноспикер за 5руб вместо стерео-звука =) в сад!!!

Black_Cat
27.03.2007, 03:05
имхо ориентироваться на чернобелый вариант цветного экрана это то же самое, что и на моноспикер за 5руб вместо стерео-звука =) в сад!!!Это такае-же "сцена" как и другие "извращения" типа ASCI графики, не вижу в этом ничего плохого. Если есть кто, кого это "торкает", то почему бы и нет? У фотографов ч/б фотография - это искусство, а цвет - ширпотреб, попса. Я и сам с ностальгией вспоминаю cвой monoVGA от какого-то терминала, не ч/б ширпотреб а ч/зелёный, притом зелёный в нём был супернасыщенным, а не жёлто-зелёное говно болгарского производства. DOOM на нём имел неповторимый вид - всё в насыщенном тёмно-зелёном - непередаваемо. Художникам следовало бы попробовать - это возможно применить где-то как фишку. И вообще есть ли на Спеке монохромная сцена?

Lethargeek
27.03.2007, 04:17
Когда монохромный сигнал мешается внутри Спека - там по крайней мере можно подобрать весовые коэффициенты и быть "железно" уверенным какая комбинация отвечает какой яркости, а в ящике всё зависит от его настройки и бог знает правильно ли мешает цвета конкретно этот ящик. Известны примеры, когда люди писали софт ориентируясь на свой "ящик" и лишь спустя годы узнавали что он оказывается был ненастроен и на хорошо отрегулированном ящике всё выглядит мягко говоря "не так" красиво.
При чем тут ящик? Главное - чтоб последовательность яркостей правильно выстраивалась (соотв-но номеру цвета). Если этого нет при выключенной (выкрученной) цветности - значит, именно Спек неправильно подключен.

Любой ящик время от времени кажет настроечную таблицу. ;)

Black_Cat
27.03.2007, 05:06
Главное - чтоб последовательность яркостей правильно выстраивалась (соотв-но номеру цвета). А она правильно отображается в Спеке? Как с линейностью преобразования? Почему не используют это, а изобретают оттенки серого через моргалку?
Любой ящик время от времени кажет настроечную таблицу. Вопросы я задаю не просто так, а с "прицелом" :). В данном случае меня интересует перспектива, когда единственным средством отображения останется VGA, у которого нет "железного" монохромного режима как у ящика, а у Спека нет драйвера как у РС, который делает из цвета монохром, а значит нужен будет преобразователь типа RGB-MIXED-RGB или например RGB-MIXED-GREEN.

Lethargeek
27.03.2007, 05:36
А она правильно отображается в Спеке? Как с линейностью преобразования? Почему не используют это, а изобретают оттенки серого через моргалку?
Да хрен с ней с линейностью, лишь бы порядок не был перепутан.
Моргалки тоже у всех разные, если уж на то пошло.


В данном случае меня интересует перспектива, когда единственным средством отображения останется VGA, у которого нет "железного" монохромного режима как у ящика
Шо? У "перспективных" мониторов нет настройки "COLOR"? :v2_blink:

Black_Cat
27.03.2007, 06:26
нет настройки "COLOR"? нет включения монохрома, как на ящике.

хрен с ней с линейностьюнаверно всёж не хрен, раз народ вместо естественных 8ми оттенков на пиксель в моргалки полез :( . Ответит мне кто на вопрос - почему?

Lethargeek
27.03.2007, 06:45
нет включения монохрома, как на ящике.
0 <|-------------> 100 RED
0 <|||-----------> 100 GREEN
0 <||------------> 100 BLUE
:)

Добавлено через 2 минуты

раз народ вместо естественных 8ми оттенков на пиксель в моргалки полез
Которые тоже непредсказуемо выглядят на разных агрегатах. :D

Grand
15.04.2007, 02:26
Возникла у меня идея сделать поддержку таких BMP-файлов в моём будущем GSV (правда, не представляю когда работы над ним вновь начнуться :)).
Надо бы придумать способы (полу)автоматического детектирования этих файлов. Можно делать это по размеру: 24694 байтов (97 секторов), но я предлагаю закрепить ещё и какое-нибудь
расширение. Например, <4>. Также хотелось бы узнать, можно ли детектировать по заголовку данных в файле (если там таковой есть)?
Кто как думает?

CityAceE
15.04.2007, 03:12
Также хотелось бы узнать, можно ли детектировать по заголовку данных в файле (если там таковой есть)?
Детектировать нужно по заголовку. В заголовке файла всё прописано.
Хотя для начала, чтобы не лезть внутрь файла, можно для начала проверить его длину. Требуемый BMP всегда будет иметь одинаковый размер. Но с другой стороны ничто не мешает сделать просмотр файлов не только 192х256, то также как более мелких, так и более крупных.

Grand
15.04.2007, 09:47
А где можно прочитать про формат заголовка BMP-файла?

CityAceE
15.04.2007, 10:21
Вот формат BMP-файла:


Структура Bmp-файла

Имя Длина Смещение Описание

Заголовок файла (BitMapFileHeader)

Type 2 0 Сигнатура "BM"
Size 4 2 Размер файла
Reserved 1 2 6 Зарезервировано
Reserved 2 2 8 Зарезервировано
OffsetBits 4 10 Смещение изображения от начала файла

Информационный заголовок (BitMapInfoHeader)

Size 4 14 Длина заголовка
Width 4 18 Ширина изображения, точки
Height 4 22 Высота изображения, точки
Planes 2 26 Число плоскостей
BitCount 2 28 Глубина цвета, бит на точку
Compression 4 30 Тип компрессии (0 - несжатое изображение)
SizeImage 4 34 Размер изображения, байт
XpelsPerMeter 4 38 Горизонтальное разрешение, точки на метр
YpelsPerMeter 4 42 Вертикальное разрешение, точки на метр
ColorsUsed 4 46 Число используемых цветов (0 - максимально возможное для данной глубины цвета)
ColorsImportant 4 50 Число основных цветов

Таблица цветов (палитра) (ColorTable)

ColorTable 1024 54 256 элементов по 4 байта

Данные изображения (BitMap Array)

Image Size 1078 Изображение, записанное по строкам слева направо и снизу вверх

Взято отсюда (http://wormer.gorodok.net/game/gamedev/2.htm).

icebear
20.04.2007, 12:37
Вот формат BMP-файла:
...

Тока вот с заголовками битмэптов не всё так просто, их четыре штуки. Палитры может и не быть. За подробностями в MSDN.