Нашел в Win32Help в структуре 'BITMAPINFO' в параметре 'bmiHeader.biCompression' возможность выбора компресии картинки. Пишу: ... mov bmpinfo.bmiHeader.biCompression,BI_JPEG ... Компилирую, и появляется такая ошибка: error A2006: undefined symbol : BI_JPEG Почему и как это исправить? P.S. еще вопрос несовсем по теме: Как правильно говорить компилирую или ассемблирую, когда подразумевается создание exe-файла из asm-кода
укажи соответствующий .inc (gdi32.inc), в котором описана константа BI_JPEG. Или пиши саму константу: mov bmpinfo.bmiHeader.biCompression,4
cresta, gdi32.inc уже был указан. Все равно выдает ту же ошибку, а если пишу вместо BI_JPEG цифру 4, то почему-то jpeg-файл не получается создать. Исходный код взял с официального сайта Iczelion'а - процедура делает скриншот и сохраняет его в файл. Может вы уже сталквились с подобной ситуацией, что сюда еще нужно добавить? 1431247614__Capture.rar P.S. насколько я понимаю надо вместо процедуры CreateDIBSection написать другую, котора создавала бы JPEG а не BMP. Только какую 'CreateFileMapping'? Может где-то есть готовый пример создания jpeg-файла?
В gdi32.inc хранятся символы (т.е. имена ф-ций) соответствующей либы. Все константы - в windows.inc. BI_JPEG там, правда, нет, но cresta уже привёл значение этой константы. ActioN К сожалению, BI_JPEG в поле biCompression никак не влияет на процесс формирования DIB'а. Максимум что можно получить таким путём - это пресловутый RLE.
Quantum, почитал щас тему по графическим библиотекам. Завтра скачаю какую-то из них. Надеюсь там есть пример использования. Кстати, если использовать такую библиотеку, на сколько размер программы увеличится?
Примеры есть на си, на VB. Асмовых естественно нет. Надо будет вникать в работу функций и вызывать их иначе, чем в примерах, по ассемблерному. Или как минимум, ясно представлять себе все параметры, передаваемые в функции. намного Пример: exe без либы 46 кб, с прилинкованой либой 273 кб (это для VICTOR Library)
cresta, немало -~ 227 кб. А можно ли как-нибудь бел либы только jpeg-файл с компрессией сделать? Если написать программу, к примеру на делфи, в которой идет jpeg-компресия, потом дизассемблировать, и посмотреть что к чему, такое реально или лучше не связываться с таким способом?
Сделал только что самый простейший exe-файл - работа с jpg. И размер (на C++ Builder) увеличился аж на 85 кб (Без VCL и др. библиотек). Значит на асме тоже примерно на столько размер программы увеличится?
Что там билдер делает, какие куски кода пришивает - не знаю. Можно взять и проследить (например в olly) какие процедуры вызываются при конвертации в jpeg, и прямо из оли выдрать их и оформить отдельно, или воткнуть в свою программу. Я таким способом пользуюсь, когда исходник на vc, а ковыряться в его типах удовольствие не из приятных. Сделал си-ехе, и из оли выдрал асм-листинг. Естественно нужно будет подправить адреса процедур и меток на реальные.