Важная информация
Показано с 1 по 4 из 4

Тема: Процедура для просмотра спектрумистских картинок

  1. #1 Процедура для просмотра спектрумистских картинок 
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    Во время написания игры на степлере, возникла необходимость вывода заставки к ней. Вначале я хотел использовать BMP картинку, но потом посчитал, что 320*240/2=38400. Именно столько ячеек будет занимать картинка в памяти, ведь процедура Абадябера из модуля graph.suf перед выводом изображения запоминает его.
    Мой интерпретатор поддерживает только 10000 ячеек, поэтому вариант с BMP-форматом отпал.
    Возникла необходимость использовать какой-то другой графический формат, занимающий меньше места в памяти.
    Мой выбор пал на формат, в котором хранятся картинки на компьютере ZX-Spectrum. На ПК эти файты имеют расширения .scr. Их прелесть в том, что при разрешении 256*192, 15 цветов они весят всего 6,75 кб. Это достигается благодоря тому, что цвет даётся не на кажды пиксель, а на группу 8*8 пикселей.
    Так вот, я написал библиотеку, которая выводит рисунки в этом формате на экран. При этом она не использует никакой дополнительной памяти.

    Пользоваться этой библиотекой так:
    *[s,x,y]<DrawSpecPic>
    , где - s - указатель на строку с именем файла. x,y - координаты выводимого изображения.

    В архива два варианта библиотеки: zxgfx64 - для разрешения 640*480, использует стандартные степлеровские функции вывода изображения. zxgfx32 - для разрешения 320*240, использует прямой доступ к памяти.
    Также в архиве несколько рисунков и демонстрационная программа.
    Вложения
    • Тип файла: rar scr.rar (52.5 Кб, Просмотров: 6)
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  2. Пользователь сказал cпасибо:

    Абадябер (25.01.2013)

  3. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Спасибо за программу, с удовольствием запустил, посмотрел на симпатичные изображения, а также на скриншоты с нашего форума
    Кстати, чрезстрочный вывод выглядит довольно красиво, должен признать - для заставки очень неплохо.
    Формат довольно интересный, однако, увы, только для заставок в текущей реализации и годится - все отрисовывается очень медленно. Даже на пентиуме 1 более 10 секунд может быть, чтобы отрисовать только первый лист.
    Также, в режиме 320x200 наблюдается неверное позиционирование картинок на экран, что не совсем хорошо =(
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Вполне возможно, что вашу библиотеку можно довольно неплохо ускорить, если это, конечно, необходимо.
    1. Как понимаю, изображение побайтно читается из файла, а потом байт сразу-же по определенным правилам выводится на экран, верно? Если так, то все-таки, для 6Кб вполне можно грузить файл в память полностью. У вас 10000 ячеек, а картинка будет чуть более 3000. В принципе, приемлемо, а т.к для каждого байта не придется терзать прерывание (посмотрел, там вообще 4 функции), то можно получить неплохое ускорение. Останется просто извлекать из массива в памяти нужный байт, а потом уже рассчитывать, куда его поместить.
    Что грустно, для расчета положения каждой точки используется весьма сложная формула. Но это уже формат такой, как понимаю, нужно хорошенько все обдумать, чтобы ускорить это дело.
    2. Ну добавьте, наконец, в TOTOP поддержку полного сегмента переменных Придется всего-лишь добавить две команды выделения\освобождения памяти, и поменять доступ к переменным, с vars[varnum] на vars^[varnum]. И можно будет загружать картинки в память пачками - тем более, с такой-то либой, как у вас. Или есть какие-либо причины, чтобы не делать так?
    А так, в целом, большое спасибо за программу, было очень приятно посмотреть. Надеюсь, библиотека эта еще определенно будет для чего-то использоваться, чтобы мы увидели снова что-нибудь новенькое на степлере =)
    Последний раз редактировалось Абадябер; 25.01.2013 в 05:12.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  4. Пользователь сказал cпасибо:

    Kakos_nonos (26.01.2013)

  5. #3  
    Супер модератор Аватар для Kakos_nonos
    Регистрация
    07.01.2011
    Адрес
    Кубань
    Сообщений
    1,531
    Сказал(а) спасибо
    126
    Поблагодарили 428 раз(а) в 291 сообщениях
    Записей в блоге
    6
    >Также, в режиме 320x200 наблюдается неверное позиционирование картинок на экран, что не совсем хорошо =(
    У меня всё хорошо. Вы как используете? Я так:
    Код php:
    uses 'zxgfx32.suf'
    uses 'graph.suf'
    program
    *[4,19]<scr>
    $(10)('3.scr',0)
    *[10,10,10]<DrawSpecPic>
    $(3)(1$)
    *[4,3]<scr>
    Насчёт предварительного запоминания картинки в памяти подумаю. Я просто делал упор, чтобы не занимало лишней помяти.
    Выделение под переменные сегмент сделаю в следующей версии. Надо разобраться, как это сделать, и сделать
    Пока у меня в этом надобности небыло, поэтому особо не занимался этим.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  6. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Да, прошу прощения, это мой косяк Запускал я правильно, просто использовал вывод по тем координатам, которые там стояли для режима 640x480. Конечно, поэтому картинки разорвались. Теперь-же все хорошо, когда, наконец, понял, в чем дело)
    Дружба-магия-радость!
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •