bmp2jpeg

Тема в разделе "WASM.WIN32", создана пользователем svl, 10 мар 2005.

  1. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
    Здраствуйте.



    Собственно сабж. В памяти есть bmp файл:

    BITMAPFILEHEADER

    BITMAPINFOHEADER

    заполненными структурами.

    Каким образом можно сжать в JPEG? понимаю, что надо обрабатывать IPicture но исходника не нашел.



    Или как нибудь уменьшить размер получамого файла.

    Все это предназначено для сбрасывания в файл или передачи через socket. Если можно пришлите линк.



    Спасибо ВСЕМ.
     
  2. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
  3. masquer

    masquer wasm.ru

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


    Если 256 цветов достаточно, то можно попробовать в png сохранять, единственное что там с комбинацией фильтров нужно будет рахобраться - какой фильтр к какой строке применять :) Сжатие тогда будет и лучше и качественнее чем у jpg.

    Вроде в GDI+ есть функции для этого...
     
  4. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
    К качеству вопросов нет. Интересует только размер (для передачи).

    А к битовой маске ЕСТЬ !!! 32 бита.



    Может кто приведет кусок кода для сжатия по Хоффману ???
     
  5. Quantum

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

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

    Качайте GFLSDK. Пример:
    Код (Text):
    1.  
    2. void SaveImg(){
    3.    GFL_BITMAP *bitmap;
    4.    GFL_SAVE_PARAMS save_option;
    5.    GFL_ERROR r;
    6.    gflGetDefaultSaveParams(&save_option);
    7.    save_option.FormatIndex = gflGetFormatIndexByName("jpeg");
    8.    gflConvertDDBIntoBitmap(hBMP,&bitmap);
    9.    r = gflSaveBitmap(lpszPath,bitmap,&save_option);
    10.    gflFreeBitmap(bitmap);
    11. }
    12.  


    На асм перевести - раз плюнуть.
     
  6. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
    Может еще есть какие либо варианты ???

    Думаю тема интересная для многих. А варианты реализации расписаны на пальцах.



    Cпасибо большое.
     
  7. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Есть вариант сжать при помощи GdiPlus.
     
  8. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
    Quantum



    Спасибо за код... но

    качнул GFLSDK v2.2 (2.87 Mb) нет функции gflConvertDDBIntoBitmap ... остановился на png формате (лучшее качество/меньший размер).



    Ковырять надумал GDI+ мож у кого сорцы залежались, или линки... по готовому проще как то :)))



    Благодарю.
     
  9. Quantum

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

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

    Она в libgfle.lib определена. Так что нужны обе DLL.
     
  10. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    svl

    Да там все очень просто - загружаешь картинку, и тут-же ее сохраняешь указывая гуид джипег кодека. Кодеки можно проенамить. Короче просто в мсдне посмотри. Но гди+ не на всех виндах по дефолту есть...
     
  11. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
  12. IceStudent

    IceStudent Active Member

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

    GDIPlus в основном использует классы.

    Посмотри на форуме PROJECTS тему, там велась работа по использованию GDIPlus в masm32
     
  13. svl

    svl New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2005
    Сообщения:
    46
    Адрес:
    Ukraine
    Код (Text):
    1.  
    2. Bitmap* m_pBitmap;
    3. ...
    4. // do some paintings on m_pBitmap
    5. ...
    6. CString sFileName = "c:\\1.emf";
    7. // you can use "c:\\1.exi" or "c:\\1.wmf" here,
    8. // and you can also build it as IStream
    9. CDC *cdc = GetDC();
    10. Metafile *metafile =
    11.          new Metafile(ToWChar(sFileName.GetBuffer(sFileName.GetLength())),
    12.          cdc->m_hDC);
    13. Graphics graphics(metafile);
    14. graphics.DrawImage(m_pBitmap, 0, 0, m_pBitmap->GetWidth(),
    15.                                   m_pBitmap->GetHeight());
    16.  
    17. static WCHAR* ToWChar(char * str)
    18. {
    19.   // in GDI+, all the parameters about the symbol are WCHAR type
    20.   // this funciton is a tranformation function
    21.  
    22.   static WCHAR buffer[1024];
    23.   wcsset(buffer,0);
    24.   MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024);
    25.   return buffer;
    26. }
    27.  
    28.  
    29.  






    Воины дзена, Паладины, Хай-тековцы подскажте плз как это выглядит на асме...



    Огромное спасибо за советы.
     
  14. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    svl

    Дык а в чем проблема-то - скомпилируй с генерацией ассемблерного листинга и все.