Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ Классы, функции для конвертирования *.dds 
V
    Опции темы
rudvil
Дата 25.11.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



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

В "Microsoft DirectX SDK (August 2009)" есть замечательная программа-конвертер "texconv.exe".
С её помощью можно легко конвертировать *.dds текстуры в *.jpg и другие форматы.
Проблема в том что в самом SDK нету исходников этого конвертера, собственно вопрос, используя какие функц. или классы можно также просто(путь к *.dds и впринципе все...) конвертировать *.dds в *.jpg.
Искал в msdn, ничего подходящего не нашел...

Это сообщение отредактировал(а) rudvil - 25.11.2009, 17:25
--------------------
xor
PM MAIL Skype   Вверх
586
Дата 28.11.2009, 14:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Поищи в поисковике "DXT TOOLS". Там есть статическая библиотека для конвертирования.
PM   Вверх
rudvil
Дата 28.11.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Цитата(586 @ 28.11.2009,  13:03)
Поищи в поисковике "DXT TOOLS". Там есть статическая библиотека для конвертирования.

Спасибо, про это я знаю и это не совсем то...
Нужна именно реализация на С++, я сразуже наткнулся на библиотеку DevIL, но там столько исходников между собой переплетено... что моего уровня в программирование не хватает чтобы выдрать оттуда конвертирование *.dds в *.jpg :(
Поэтому и написал сюда, может ктонибуть знает вариант попроще.

P.S.
это нужно для личного использования, т.е. если будут варианты как с DevIL но попроще то обязательно предлагайте.

Это сообщение отредактировал(а) rudvil - 28.11.2009, 16:03
--------------------
xor
PM MAIL Skype   Вверх
rudvil
Дата 3.12.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Всеже смог найти то что нужно, правда пришлось извратиться... вот код
Код
#include <windows.h>
#include <d3dx9.h>

HWND hwnd = NULL;
LPDIRECT3D9 d3d = NULL;
LPDIRECT3DDEVICE9 device = NULL;
LPDIRECT3DTEXTURE9 texture = NULL;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
LRESULT CALLBACK WindowProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX winClass; 
    MSG uMsg;
    memset(&uMsg, 0, sizeof(uMsg));
    winClass.lpszClassName = "dds2jpg";
    winClass.cbSize = sizeof(WNDCLASSEX);
    winClass.style = CS_HREDRAW | CS_VREDRAW;
    winClass.lpfnWndProc = WindowProc;
    winClass.hInstance = hInstance;
    winClass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
    winClass.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
    winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winClass.lpszMenuName = NULL;
    winClass.cbClsExtra = 0;
    winClass.cbWndExtra = 0;
    if (!RegisterClassEx(&winClass))
        return E_FAIL;
    hwnd = CreateWindowEx(NULL, "dds2jpg", "", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
    if (hwnd == NULL)
        return E_FAIL;
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device);
    
    D3DXCreateTextureFromFile(device, "test.dds", &texture);
    D3DXSaveTextureToFile("test.jpg", D3DXIFF_JPG, texture, 0);
    
    if (texture != NULL)
        texture->Release();
    if (device != NULL)
        device->Release();
    if (d3d != NULL)
        d3d->Release();
    
    UnregisterClass("dds2jpg", winClass.hInstance);
    return uMsg.wParam;
}

LRESULT CALLBACK WindowProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {    
        case WM_KEYDOWN: {
            switch (wParam) {
                case VK_ESCAPE:
                    PostQuitMessage(0);
                    break;
            }
        }
        break;
        case WM_CLOSE: {
            PostQuitMessage(0);    
        }
        case WM_DESTROY: {
            PostQuitMessage(0);
        }
        break;
        default: {
            return DefWindowProc(hWnd, msg, wParam, lParam);
        }
        break;
    }
    return 0;
}

Вопрос к специалистам, можно ли как-нибуть обойтись без 
Код
d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device);
 3-его параметра т.е. хендла окна.
Если вместо "hwnd" вписать туда "NULL", то функция "CreateDevice" выполняется некорректно, что в свою очередь приводит в неработоспособность функцию "D3DXCreateTextureFromFile"...
Cижу теперь ломаю голову как обойтись без этого хендла, по идее мне эти окна вообще не нужны, простой консоли вполне хватит.
Буду благодарен за любую помощь.
--------------------
xor
PM MAIL Skype   Вверх
maxxant
Дата 3.12.2009, 01:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 8.9.2009

Репутация: нет
Всего: 1



Цитата(rudvil @  25.11.2009,  17:24 Найти цитируемый пост)
В "Microsoft DirectX SDK (August 2009)" есть замечательная программа-конвертер "texconv.exe".


только вот качество полученной текстуры сильно хуже чем от конвертера NVidia. Если качество критично, то лучше пользуйтесь нвидивскими.
PM MAIL   Вверх
rudvil
Дата 3.12.2009, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 20.11.2009
Где: Latvia/Riga

Репутация: нет
Всего: 3



Цитата(maxxant @ 3.12.2009,  00:21)
Цитата(rudvil @  25.11.2009,  17:24 Найти цитируемый пост)
В "Microsoft DirectX SDK (August 2009)" есть замечательная программа-конвертер "texconv.exe".


только вот качество полученной текстуры сильно хуже чем от конвертера NVidia. Если качество критично, то лучше пользуйтесь нвидивскими.

Если разница и была то очень маленькой иначе я бы это заметил.
Во всяком случае в приведенном мною коде потери точно не наблюдается.
Опять же хочется увидеть код на чистом Win/DirectX API... но всеравно спасибо за совет.

Это сообщение отредактировал(а) rudvil - 3.12.2009, 02:18
--------------------
xor
PM MAIL Skype   Вверх
bugmenot1
Дата 19.3.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.5.2008

Репутация: нет
Всего: 0



rudvil можно указать d3dpp.hDeviceWindow = GetDesktopWindow(); или в третем параметре функции CreateDevice поместить вызов GetDesktopWindow()
Если выбрать первый вариант то третим параметром может быть уже HWND_DESKTOP (тобишь 0)
CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWND_DESKTOP, ...

А вот как быть с размерами и цветовой палитрой получаемой на выходе D3DXSaveTextureToFile?
Картинка получается квадратной, по большей стороне загружаемой в D3DXCreateTextureFromFile, цвета блеклые.

Это сообщение отредактировал(а) bugmenot1 - 19.3.2010, 16:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.