Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Конвертировать BMP в JPG/JPEG


Автор: Testernew 14.4.2012, 22:01
Здравствуйте, как можно конвертировать bmp в jpeg? интересует самый простой способ, буду благодарен за примеры кода...

Использую  MS Visual Studio 6.0


Автор: feodorv 14.4.2012, 22:52
Можно посмотреть в сторону http://ru.wikipedia.org/wiki/Libjpeg...
Или в сторону http://www.rsdn.ru/article/gdi/gdiplus1.xml... (http://msdn.microsoft.com/en-us/library/ms535407%28v=vs.85%29.aspx)

Автор: Testernew 14.4.2012, 23:36
Обьясните пожалуйста как установить верно эту библиотеку... я скачал gdiplus.lib(кинул вместе с проектом и в папку system32) gdiplus.h кинул в папку include 

Выполнил также такие инструкции по установке:


добавляем следующие строчки:

#include <GdiPlus.h>
using namespace Gdiplus;
и в конце файла stdafx.cpp добавляем строку
#pragma comment(lib, "GdiPlus.lib")
Кроме того, в файле stdafx.h необходимо удалить или закомментировать строку
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 



Код

#include <stdafx.h>
#include <gdiplus.h>
using namespace Gdiplus;

void main {

}
 

Вот что пишет:

Код

d:\microsoft visual studio\vc98\include\gdiplusenums.h(28) : error C2146: syntax error : missing ';' before identifier 'GraphicsState'

Вот эта строка в gdiplusenums.h
Код

typedef UINT GraphicsState;

Автор: volatile 14.4.2012, 23:49
Цитата(Testernew @  14.4.2012,  23:36 Найти цитируемый пост)
syntax error : missing ';' before identifier 'GraphicsState'

Это значит что компилятор не знает что такое UINT

Подсказка:
А не знает он этого, потому-что не подключен windows.h

Автор: Testernew 15.4.2012, 08:10
Цитата(volatile @ 14.4.2012,  23:49)
Цитата(Testernew @  14.4.2012,  23:36 Найти цитируемый пост)
syntax error : missing ';' before identifier 'GraphicsState'

Это значит что компилятор не знает что такое UINT

Подсказка:
А не знает он этого, потому-что не подключен windows.h


Спасибо, но теперь он ругается на вот эту строку(windows.h уже подключен)
Код

typedef Status (WINAPI *NotificationHookProc)(OUT ULONG_PTR *token);


Вот что он пишет:
Код

error C2065: 'ULONG_PTR' : undeclared identifier



Вроде собралось, еще не тестил, и не знаю на сколько решение того человека верное:
Цитата

Поставил тут. DirectX 8.1 SDK (RC2) на WinXP Pro En Sp1. В DevStudio пошёл в Tools->Options->Directodies и добавил в 'Include Files' путь '...\DxSDK\Include\Prelelease', в 'Library Files' путь '...\DxSDK\Lib\Prelelease'. Пробую компилировать примеры - получаю всегда и пожизни одно и то же:
d3dapp.cpp 
D:\PROGRAM FILES\DXSDK\INCLUDE\PRERELEASE\D3DX8Math.h(259) : error C2065: 'ULONG_PTR' : undeclared identifier 
D:\PROGRAM FILES\DXSDK\INCLUDE\PRERELEASE\D3DX8Math.h(259) : error C2146: syntax error : missing ')' before identifier 'p' 
...

Нашё в форуме тему, в которой эта проблема уже обсуждалась (http://www.gamedev.ru/forum/?action=showtopic&group=0&topic=763). Там посоветовали дописать определение ULONG_PTR, например как typedef unsigned long ULONG_PTR. Однако, сиё не канает по нескольким причинам:

1. Согласитесь, кривовато и вообще антиидейно =) 
2. Причиной переустановки сдк стал ресетап винды. После первой интсалляции сдк подобных проблем не было. Странно, что они появились сейчас. 
3. Вообще, среди сдкашных хэдеров присутствует файл dvp.h. В нём есть следующий фрагмент:

#ifndef MAXULONG_PTR 
#define ULONG_PTR    DWORD 
#endif //MAXULONG_PTR

Кроме как в нём, определения ULONG_PTR больше нет нигде. Вроде как, этот dvp.h должен инклудиться во все остальные файлы, где используется ULONG_PTR. Дабы проверить, не определён ли MAXULONG_PTR, непосредсвенно перед ошибочной строкой файла d3dapp.cpp, написал "MAXULONG_PTR a;". Оказалось, что MAXULONG_PTR тоже не определён.

Тогда фигли? Майкрософты чтоли забыли включить dvp.h куда требуется, или меня опять подвела кривизна рук?




Автор: volatile 15.4.2012, 10:09
Цитата(Testernew @  15.4.2012,  08:10 Найти цитируемый пост)
Поставил тут. DirectX 8.1 SDK 

Testernew, для GDI+ DirectX не нужен.

Цитата(Testernew @  15.4.2012,  08:10 Найти цитируемый пост)
error C2065: 'ULONG_PTR' : undeclared identifier

Если вы правильно подключили хедеры (сначала <windows.h>, потом <gdi...), то проблема скорей всего в старой студии.

Цитата(Testernew @  15.4.2012,  08:10 Найти цитируемый пост)
Вроде собралось, 

Ну если собралось, и проблема была только в  ULONG_PTR, то пусть так и будет.
лучше все-же определить ULONG_PTR как-то так:
Код

#ifdef _WIN64
   typedef unsigned __int64 ULONG_PTR;
#else
   typedef unsigned long ULONG_PTR;
#endif


Нужно переходить на новую студию. С VC6 будет еще не одна проблема.

Добавлено через 12 минут и 44 секунды
Ну да. Нужно использовать свежую SDK.

Цитата

error C2065: 'ULONG_PTR' : undeclared identifier 
The GDI+ 1.0 Software Development Kit (SDK) requires the current Microsoft Platform SDK header and library files. 

http://support.microsoft.com/kb/320234

Автор: baldina 15.4.2012, 11:01
http://www.codeproject.com/Articles/1300/CxImage

Автор: volatile 15.4.2012, 11:47
Да, а если нужна быстрая кросс-платформенная jpg библиотека, то http://sourceforge.net/projects/libjpeg-turbo/
Там только jpg, но зато быстрая, самая быстрая из тех что я видел.
Раза 2-3 быстрее чем gdi+ например.

Автор: mrgloom 16.4.2012, 09:53
можно подключить  libjpeg
а можно и все форматы сразу используя opencv или ImageMagick 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)