либы для графики

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

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Доброй ночи.

    Люди, кто знает какие-нибудь нормальные либы (или dll) для работы с gif, png, tiff c sdk (примерами) поделитесь ссылками, а то все что попадается - сплошные COM да OLE да Си-классы :dntknw:



    Через OLE png-tiff не катят, да и gif очень медленно обрабатывается. Для png нашёл на форуме ссылку (bogrus давал), но там либа с файлами не работает, только с ресурсов нормально грузит:dntknw:



    И ещё вопрос: есть ли альтернатива StretchBlt в плане скорости?
     
  2. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    imlib. Сейчас imlib2 появился, но я на него не смотрел ещё.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Погуглил imlib - что-то кругом пестреют никсы, редхэты, не к добру это. Похоже, все сорсы на сях и под nix.



    load PPM, PGM, TIFF, PNG, XPM, JPEG and EIM format images

    про gif забыли.



    Нашёл тоже одну библу - Victor Image Processing Library.

    http://www.catenary.com

    С кучей примеров. Есть dll, есть вариант c lib (правда для си)

    Единственно она не бесплатная. До 31 июля :)
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    GFL SDK - тяжёлая DLL-либа с большим количеством форматов, но довольно проста в использовании.
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Зип 3 метра. Посмотрим, что там есть.



    Victor Image Processing Library тоже довольно простая в использовании.

    И работает достаточно быстро, значительно быстрее методов интерфейса IPicture.

    И размер dll 232 кб, а lib - 58 кб.
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Защита какая-то там символическая..
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Уже проверил ?? :)



    Кстати о защите. Там для gif lzw используется, и он с символическим кодом, который надо заменить на настоящий (покупкой лицензии). Интересно, ограничение на lzw тоже сработает вместе с ограничением на саму либу?



    А GFL действительно мощная (и тяжёлая)
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Видимо Quantum использовал её (предположительно). Если да, то вопрос: там в комплекте есть файлы

    libgfle240.dll

    libgfl240.dll

    libgfle.lib

    libgfl.lib

    Эти .lib - просто переходники для dll?
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Проще глянуть самому: если lib содержит obj - значит она для статической линковки. Если имена вида "_imp__XXX", причём не системные (_imp__GetLastError@0), а из этой либы, то она — для динамической линковки.
     
  10. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    cresta



    unisys уже года 2 как не владеет патентом на лзв, поэтому ничего не нужно лицензировать.

    А вообще для гифа и пнг такая либа за 2-4 дня пишется, я на пнг 4 дня потратил, и то из них большая половина на злиб ушло. Тиф посложнее, но там просто внутри куча разных алгоритмов может использоваться. Или купить уже готовое.
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    masquer



    Если несколько простых функций, то можно самому быстренько управиться, но там столько функций, что я и за 2 месяца не управлюсь :) Проще за два дня поломать :)

    А купить - за 2 дня полтысячи козлов не заработаю.



    IceStudent

    Раз завел речь о
    , то вопрос:

    Конвертирую Victor Image Processing Library с помощью DLL2LIB, так после конвертации некоторые функции оказались с именами: __imp__loadgif@8 или __imp__allocimage@16. А большая часть приняла вид __imp__defaultpalette, __imp__blur, __imp__loadpngpalette и т.д. Так те, что с "@x" не работают, то вылетят, то неверный результат возвращают, хотя и компилится с ними exe нормально. Приходится с ними через GetProcAddress общаться.

    Те, которые без "@x" получились - работают напрямую, в т.ч. и с invoke. Хотя и для тех и для других указал resolve symbol :dntknw: Это что, баг DLL2LIB или что-то не так делаю? Хотя это наверное больше для Quantum'а вопрос.
     
  12. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    если для себя пишешь, то еще ладно, а вот если на заказ, и потом твоего клиента иметь будут прежде всего :)
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    cresta



    Можно нагуглить старую (относительно) vic32.dll, которая то ли бесплатная, то ли без защиты. Правда, функциональность у неё чуть ли не вдвое меньше теперешней :)





    Нужно смотреть, что там не так в статической связке, так с ходу не скажешь.
     
  14. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Нашёл, в чем проблема с DLL2LIB, но не знаю, как поправить :dntknw:



    Суть такова: некоторые функции из dll используют данные, зашитые в dll (возможно в секции .data)

    На примере одной процедуры:


    Код (Text):
    1. 60CB2FC1 > FF35 8C5FCC60    PUSH DWORD PTR DS:[60CC5F8C]
    2. 60CB2FC7   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
    3. 60CB2FCB   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
    4. 60CB2FCF   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
    5. 60CB2FD3   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
    6. 60CB2FD7   E8 03000000      CALL vic32.60CB2FDF
    7. 60CB2FDC   C2 1000          RETN 10
    8.  
    9. После этого на стеке имеются данные:
    10. 60CB2FDF    ;четыре параметра передавал я
    11. 00000690    ;из exe при вызове функции
    12. 0000091F
    13. 00000008
    14. [b]00000001[/b]    ;этот параметр dll добавляет сама из DWORD PTR DS:[60CC5F8C]




    Если вызывать функцию из .lib (сделанную DLL2LIB), то код тот же, но один параметр берётся из exe.


    Код (Text):
    1. 004272E5  /$ FF35 41C44300  PUSH DWORD PTR DS:[43C441]
    2. 004272EB  |. FF7424 14      PUSH DWORD PTR SS:[ESP+14]
    3. 004272EF  |. FF7424 14      PUSH DWORD PTR SS:[ESP+14]
    4. 004272F3  |. FF7424 14      PUSH DWORD PTR SS:[ESP+14]
    5. 004272F7  |. FF7424 14      PUSH DWORD PTR SS:[ESP+14]
    6. 004272FB  |. E8 03000000    CALL My_Exe.00427303
    7. 00427300  \. C2 1000        RETN 10
    8.  
    9. После этого на стеке имеются данные:
    10. 60CB2FDF    ;четыре параметра
    11. 00000690    ;из exe при вызове функции
    12. 0000091F    ;совпадают
    13. 00000008
    14. [b]00000000[/b]    ;этот параметр теперь берется из exe DWORD PTR DS:[43C441]




    Т.е. данные , хранящиеся в dll, при конвертации в lib теряются/заменяются. И функция не отрабатывает нормально.

    Можно ли это поправить?
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    а подробнее, что за функция?

    ага, нашёл, это alloc_image.



    та переменная (dw_AllocImage) инициализируется в DllMain в зависимости от версии системы, вроде:
    Код (Text):
    1.  
    2. .text:60CB2F0D                 mov     eax, ebx        ; eax = GetVersion
    3. .text:60CB2F0F                 xor     ecx, ecx
    4. .text:60CB2F11                 and     eax, 0FFh
    5. .text:60CB2F16                 mov     cl, bh
    6. .text:60CB2F18                 imul    eax, 64h
    7. .text:60CB2F1B                 add     eax, ecx
    8. .text:60CB2F1D                 cmp     ebx, 80000000h
    9. .text:60CB2F23                 mov     dword_60CC5F90, eax
    10. .text:60CB2F28                 jnb     short loc_60CB2F2F
    11. .text:60CB2F2A                 push    2
    12. .text:60CB2F2C                 pop     ecx
    13. .text:60CB2F2D                 jmp     short loc_60CB2F37
    14. .text:60CB2F2F ; -----------------------------------------
    15. .text:60CB2F2F
    16. .text:60CB2F2F loc_60CB2F2F:
    17. .text:60CB2F2F                 cmp     eax, 18Bh
    18. .text:60CB2F34                 sbb     ecx, ecx
    19. .text:60CB2F36                 inc     ecx
    20. .text:60CB2F37
    21. .text:60CB2F37 loc_60CB2F37:
    22. .text:60CB2F37                 cmp     ecx, edi        ; edi = 1
    23. .text:60CB2F39                 mov     dword_60CC5F94, ecx
    24. .text:60CB2F3F                 mov     dw_AllocImage, esi ; dw_AllocImage = 0
    25. .text:60CB2F45                 jz      short loc_60CB2F53
    26. .text:60CB2F47                 cmp     ecx, 2
    27. .text:60CB2F4A                 jnz     short loc_60CB2F59
    28. .text:60CB2F4C                 cmp     eax, 15Eh
    29. .text:60CB2F51                 jb      short loc_60CB2F59
    30. .text:60CB2F53
    31. .text:60CB2F53 loc_60CB2F53:
    32. .text:60CB2F53                 mov     dw_AllocImage, edi
    33. .text:60CB2F59
    34. .text:60CB2F59 loc_60CB2F59:
     
  16. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta



    Да. Кстати, я этой либой давно пользуюсь и очень доволен (не сочтите за рекламу :)





    Вы не забыли вызвать DllMain перед тем как использовать любую другую функцию из либы? (Айс уже подметил)
     
  17. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    IceStudent



    Угу, это allocimage. Неизвестно, где ещё такие подводные камни могут оказаться :dntknw:



    Quantum

    :-0

    invoke VIC32_DllMain, NULL, DLL_PROCESS_ATTACH, NULL

    Никогда самому не приходилось вызывать DllMain. Тем более в .lib. Поэтому даже и не думал об этом. А действительно, инициализируются данные. Хм.

    Остается надеяться, что все необходимые.







    Если продукт достойный, почему бы и не порекламировать :)

    Попробовал несколько примеров для GFL - возможностей несколько больше, чем у VIC, но пробовал только как ActiveX (из VB6). Непосредственно с dll не получилось, кругом поинтеры на поинтеры, из VB не удалось инициализировать dll, не нашёл

    GFL_ERROR gflLibraryInitEx(

    GFL_ALLOC_CALLBACK alloc_callback,

    GFL_REALLOC_CALLBACK realloc_callback,

    GFL_FREE_CALLBACK free_callback,

    void * user_parms

    );

    да и callback'и честно говоря, не нравятся, неизвестно, что в них делать.

    Как ActiveX она работает медленнее VIC, возможно из-за COM (не самая быстрая технология).
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Quantum



    Достаточно вызвать 1 раз, кстати, cresta, hInstance используется только в Victorversionex, так что если звать её, то в DllMain лучщше передать реальный hInstance модуля.



    И позвать в конце с DLL_PROCESS_DETACH, там ресурсы освобождаются.



    Если нужна мультипоточность, то желательно звать ещё и с DLL_THREAD_ATTACH.



    А вообще, там инициализируются всего 3 переменных (кстати, две из них я не нашёл где используются дальше), можно придумать что-то оригинальнее вызова DllMain
     
  19. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87




    Ага сорцы, на сях. Но под винду собирается. Кроме того погугли такие либы libxpm, libtiff, libpng, libjpeg и так далее. они тоже сорцы и на сях... но MinGW + gcc всё скомпилирует без проблем. Если боишься компилировать, посмотри на cygwin, там можно найти уже скомпилированные.
     
  20. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    FreeImage

    на sourceforge