1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

BITMAPINFO - JPEG-компрессия

Тема в разделе "WASM.BEGINNERS", создана пользователем ActioN, 17 июл 2005.

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Нашел в Win32Help в структуре 'BITMAPINFO' в параметре 'bmiHeader.biCompression' возможность

    выбора компресии картинки. Пишу:

    ...

    mov bmpinfo.bmiHeader.biCompression,BI_JPEG

    ...

    Компилирую, и появляется такая ошибка:

    error A2006: undefined symbol : BI_JPEG

    Почему и как это исправить?



    P.S. еще вопрос несовсем по теме: Как правильно говорить компилирую или ассемблирую, когда

    подразумевается создание exe-файла из asm-кода
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.485
    Адрес:
    Russia
    Ответ не по теме : Скажи проще: "собираю"
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    укажи соответствующий .inc (gdi32.inc), в котором описана константа BI_JPEG. Или пиши саму константу:

    mov bmpinfo.bmiHeader.biCompression,4
     
  4. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    cresta, gdi32.inc уже был указан. Все равно выдает ту же ошибку, а если пишу вместо BI_JPEG цифру 4, то почему-то jpeg-файл не получается создать. Исходный код взял с официального сайта Iczelion'а - процедура делает скриншот и сохраняет его в файл. Может вы уже сталквились с подобной ситуацией, что сюда еще нужно добавить?

    [​IMG] 1431247614__Capture.rar

    P.S. насколько я понимаю надо вместо процедуры CreateDIBSection написать другую, котора создавала бы JPEG а не BMP. Только какую 'CreateFileMapping'? Может где-то есть готовый пример создания jpeg-файла?
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В gdi32.inc хранятся символы (т.е. имена ф-ций) соответствующей либы. Все константы - в windows.inc. BI_JPEG там, правда, нет, но cresta уже привёл значение этой константы.



    ActioN



    К сожалению, BI_JPEG в поле biCompression никак не влияет на процесс формирования DIB'а. Максимум что можно получить таким путём - это пресловутый RLE.
     
  6. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    А каким тогда образом можно получить сжатую jpeg-картинку? Может где-то готовый пример есть?
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Недавно cresta тему создал по графическим библиотекам - вам туда.
     
  8. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Quantum, почитал щас тему по графическим библиотекам. Завтра скачаю какую-то из них. Надеюсь там есть пример использования. Кстати, если использовать такую библиотеку, на сколько размер программы увеличится?
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Примеры есть на си, на VB. Асмовых естественно нет. Надо будет вникать в работу функций и вызывать их иначе, чем в примерах, по ассемблерному. Или как минимум, ясно представлять себе все параметры, передаваемые в функции.







    намного :)

    Пример: exe без либы 46 кб, с прилинкованой либой 273 кб (это для VICTOR Library)
     
  10. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    cresta, немало -~ 227 кб. А можно ли как-нибудь бел либы только jpeg-файл с компрессией сделать? Если написать программу, к примеру на делфи, в которой идет jpeg-компресия, потом дизассемблировать, и посмотреть что к чему, такое реально или лучше не связываться с таким способом?
     
  11. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Сделал только что самый простейший exe-файл - работа с jpg. И размер (на C++ Builder) увеличился аж на 85 кб (Без VCL и др. библиотек). Значит на асме тоже примерно на столько размер программы увеличится?
     
  12. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Что там билдер делает, какие куски кода пришивает - не знаю. Можно взять и проследить (например в olly) какие процедуры вызываются при конвертации в jpeg, и прямо из оли выдрать их и оформить отдельно, или воткнуть в свою программу.

    Я таким способом пользуюсь, когда исходник на vc, а ковыряться в его типах удовольствие не из приятных. Сделал си-ехе, и из оли выдрал асм-листинг. Естественно нужно будет подправить адреса процедур и меток на реальные.