Средства для конвертации BMP в JPEG (низкий уровень)

Тема в разделе "LANGS.C", создана пользователем ntp, 13 окт 2008.

  1. ntp

    ntp New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2008
    Сообщения:
    30
    Сабж конечно не нов, но я все же затрудняюсь с его реализацией.
    Дело в том что пишу я на C++ (WinAPI) и исходный растр (BMP) у меня "получается" после вызова функций
    HBITMAP b = CreateDIBSection(dc,&inf,0,&bp,NULL,0);
    SelectObject(qdc,b);
    То есть у меня есть буфер (указатель bp) содержащий BMP файл и известен размер этого файла, так вот, нужно конвертировать этот BMP растр в JPEG формат, который также, например, содержался бы в буфере.

    Нашел тут линк: http://rsdn.ru/article/qna/gdi/drawimg.xml, заинтересовался GDI+ , посмотрел прототипы функций. GdipSaveImageToStream вроде бы, по идеи, должна подходить для реализации конвертации, но вот загвоздка: я же пишу на WinAPI, мне не понятно как я буду вообще работать с этим Stream'ом. То есть мне нужна конвертация форматов, так сказать, "на уровне массивов".
    Так что у меня просьба дать совет как реализовать подобное, в каком направлении рыть,
    или быть может библиотеки есть какие-нибудь.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Мой класс написанный ещё для Borland 5.0. Метод GetData
     
  3. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    На TASM подойдёт?
    Весь кодировщик расписан "вручную", без использования функций GDI+ или других не-системных библиотек.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    DEEP
    о кстати покаж ручную реализацию, твоя личная или паблик какаято?

    PS. Gdi+ вполне себе почти-системная =)
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Имхо самая нормальная от самого производителя, остальное баловство.
     
  6. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Great
    О, так это ж я её, что ли, не на wasm отыскал, раз вы не знаете? Странно...
    Вот оно:
     
  7. ntp

    ntp New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2008
    Сообщения:
    30
    To DEEP:
    Сейчас проверил твой кодировщик. Растры с маленьким разрешением вроде кодирет нормально, но если ставлю растр 1024x768 (3 байта на пиксель) он кодирует только верхнюю половину изображения. И как я понял он работает только с 32 или 24 битными растрами, а как быть если у меня 16 битный ?)
    У тебя есть еще что-нибудь подобное ?)

    To Booster
    Мне конечно ближе (к пониманию и реализации) вариант с перекодировкой "вручную", но твой класс, думаю, тоже может помочь, только я не очень разбираюсь с этими ole'шными функциями. Уточни пожалуйста как использовать методы в твоем классе приминительно к решению моей задачи. Метод GetData возвращает указатель на данные изображения (из комментария), то есть любого изображения ? и BMP и JPG ?
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    пример на FASM. в папку кинуть 1.bmp и скомпилить. вобщем то на СИ думаю без особого труда можно переделать. в результате работы создасцо файл c:/1.jpg
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    А погуглить не пробовал? - реализаций на сях море.
     
  10. ntp

    ntp New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2008
    Сообщения:
    30
    To Y_Mur
    Ну я, знаешь ли, не нашел, поэтому и сабж создал. Приведи пример реализации пожалуйста.

    To Freeman
    Спасибо конечно за исходник, но там нужно разбираться с GDI+. Может у тебя есть линк на документацию по GDI+, а то в нете есть примеры на .NET а на Си я чтот не нашел. Может я искать не умею просто.

    P.S. Сейчас наткнулся на интеловскую либу по работе с JPEG (http://www.sources.ru/cpp/cpp_class_for_jpeg.shtml), пробую разобраться. Если кто раньше имел дело с этой библиотекой, просьба поделиться знаниями.
     
  11. ntp

    ntp New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2008
    Сообщения:
    30
    Уфф. Разобрался, вроде работает. Использовал интеловскую библиотеку. Спасибо всем кто уделил внимание.