Здраствуйте. Собственно сабж. В памяти есть bmp файл: BITMAPFILEHEADER BITMAPINFOHEADER заполненными структурами. Каким образом можно сжать в JPEG? понимаю, что надо обрабатывать IPicture но исходника не нашел. Или как нибудь уменьшить размер получамого файла. Все это предназначено для сбрасывания в файл или передачи через socket. Если можно пришлите линк. Спасибо ВСЕМ.
Если 256 цветов достаточно, то можно попробовать в png сохранять, единственное что там с комбинацией фильтров нужно будет рахобраться - какой фильтр к какой строке применять Сжатие тогда будет и лучше и качественнее чем у jpg. Вроде в GDI+ есть функции для этого...
К качеству вопросов нет. Интересует только размер (для передачи). А к битовой маске ЕСТЬ !!! 32 бита. Может кто приведет кусок кода для сжатия по Хоффману ???
svl Качайте GFLSDK. Пример: Код (Text): void SaveImg(){ GFL_BITMAP *bitmap; GFL_SAVE_PARAMS save_option; GFL_ERROR r; gflGetDefaultSaveParams(&save_option); save_option.FormatIndex = gflGetFormatIndexByName("jpeg"); gflConvertDDBIntoBitmap(hBMP,&bitmap); r = gflSaveBitmap(lpszPath,bitmap,&save_option); gflFreeBitmap(bitmap); } На асм перевести - раз плюнуть.
Может еще есть какие либо варианты ??? Думаю тема интересная для многих. А варианты реализации расписаны на пальцах. Cпасибо большое.
Quantum Спасибо за код... но качнул GFLSDK v2.2 (2.87 Mb) нет функции gflConvertDDBIntoBitmap ... остановился на png формате (лучшее качество/меньший размер). Ковырять надумал GDI+ мож у кого сорцы залежались, или линки... по готовому проще как то )) Благодарю.
svl Да там все очень просто - загружаешь картинку, и тут-же ее сохраняешь указывая гуид джипег кодека. Кодеки можно проенамить. Короче просто в мсдне посмотри. Но гди+ не на всех виндах по дефолту есть...
шото я туплю ... Как ЭТО на асме выглядит ??? Код (Text): Bitmap bm(L"test.png"); CodecsList codecsList = ReadCodecsList(true); GUID JpegId = codecsList[ImageFormatJPEG]; bm.Save(L"test2.jpg", JpegId); Взято отсюда:Работа с растрами и графическими файлами Помогите плз.
svl GDIPlus в основном использует классы. Посмотри на форуме PROJECTS тему, там велась работа по использованию GDIPlus в masm32
Код (Text): Bitmap* m_pBitmap; ... // do some paintings on m_pBitmap ... CString sFileName = "c:\\1.emf"; // you can use "c:\\1.exi" or "c:\\1.wmf" here, // and you can also build it as IStream CDC *cdc = GetDC(); Metafile *metafile = new Metafile(ToWChar(sFileName.GetBuffer(sFileName.GetLength())), cdc->m_hDC); Graphics graphics(metafile); graphics.DrawImage(m_pBitmap, 0, 0, m_pBitmap->GetWidth(), m_pBitmap->GetHeight()); static WCHAR* ToWChar(char * str) { // in GDI+, all the parameters about the symbol are WCHAR type // this funciton is a tranformation function static WCHAR buffer[1024]; wcsset(buffer,0); MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024); return buffer; } Воины дзена, Паладины, Хай-тековцы подскажте плз как это выглядит на асме... Огромное спасибо за советы.