Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 17:53   #1
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
Вопрос Как отобразить в окне DDS изображение

Хочу отобразить DDS изображение в окне своей программы не используя заголовочные файлы DirectX. Я хотел сделать так: из прочитанного заголовка получить все параметры (расширение, кол-во бит на пиксель и т.д.) и потом на их основе получить палитру изображения и создав с этой палитры битмап (CreateCompatibleBitmap) отобразить его в окне. Но вот только я не могу разобраться как получить саму палитру. Был на МСДН, но так и не смог разобраться.. Вот собственно имеющийся на данный момент код программы:

Код:
#define DDSD_CAPS			     0×00000001
#define DDSD_HEIGHT				     0×00000002
#define DDSD_WIDTH				     0×00000004
#define DDSD_PITCH				     0×00000008
#define DDSD_PIXELFORMAT			     0×00001000
#define DDSD_MIPMAPCOUNT			     0×00020000
#define DDSD_LINEARSIZE			     0×00080000
#define DDSD_DEPTH				     0×00800000

#define DDPF_ALPHAPIXELS			     0×00000001
#define DDPF_FOURCC				     0×00000004
#define DDPF_RGB				     0×00000040

#define DDSCAPS_COMPLEX			     0×00000001
#define DDSCAPS_TEXTURE			     0×00000004
#define DDSCAPS_MIPMAP			     0×00000040

#define DDSCAPS2_CUBEMAP	                     0×00000200
#define DDSCAPS2_CUBEMAP_POSITIVEX	     0×00000400
#define DDSCAPS2_CUBEMAP_NEGATIVEX	     0×00000800
#define DDSCAPS2_CUBEMAP_POSITIVEY	     0×00001000
#define DDSCAPS2_CUBEMAP_NEGATIVEY	     0×00002000
#define DDSCAPS2_CUBEMAP_POSITIVEZ	     0×00004000
#define DDSCAPS2_CUBEMAP_NEGATIVEZ	     0×00008000
#define DDSCAPS2_VOLUME	                     0×00200000

typedef struct
{
	DWORD dwSize;
	DWORD dwFlags;
	DWORD dwFourCC;
	DWORD dwRGBBitCount;
	DWORD dwRBitMask;
	DWORD dwGBitMask;
	DWORD dwBBitMask;
	DWORD dwABitMask;
} DDS_PIXELFORMAT;


typedef struct
{
	DWORD dwSize;
	DWORD dwFlags;
	DWORD dwHeight;
	DWORD dwWidth;
	DWORD dwPitchOrLinearSize;
	DWORD dwDepth;
	DWORD dwMipMapCount;
	DWORD dwReserved1[11];
	DDS_PIXELFORMAT ddspf;
	DWORD dwCaps1;
	DWORD dwCaps2;
	DWORD Reserved[2];
	DWORD dwReserved2;
} DDS_HEADER;

......

void CDDSDlg::OnBnClickedButton1()
{
	HDC dc;
	HBITMAP bit;
	BITMAPINFO bmi;
	FILE* dds;
	CString path;
	DDS_HEADER hDds;

	GetDlgItemText(IDC_EDIT1, path);
	if(fopen_s(&dds, path, "rb"))
	{
		MessageBox("Не удалось открыть файл!", "Ошибка", MB_OK | MB_ICONEXCLAMATION);
		return;
	}
	DWORD ID;
	fread(&ID, 4, 1, dds);
	if(ID != *(DWORD*)"DDS ")
	{
		MessageBox("Файл не является нормальным DDS файлом!", "Ошибка", MB_OK | MB_ICONEXCLAMATION);
		return;
	}

	fread(&hDds, 124, 1, dds);
	BYTE* buffer = new BYTE[hDds.dwPitchOrLinearSize];
	//fread(buffer, hDds.dwPitchOrLinearSize, 1, dds);

	dc = ::GetDC(m_hWnd);
	bit = CreateCompatibleBitmap(dc, hDds.dwHeight, hDds.dwWidth);
	bmi.bmiHeader.biWidth = hDds.dwWidth;
	bmi.bmiHeader.biHeight = hDds.dwHeight;
	bmi.bmiHeader.biXPelsPerMeter = 0;
	bmi.bmiHeader.biYPelsPerMeter = 0;
	bmi.bmiHeader.biSize = 40;
	bmi.bmiHeader.biPlanes = 1;
	bmi.bmiHeader.biCompression = 0;
	bmi.bmiHeader.biSizeImage = 0;
	bmi.bmiHeader.biClrUsed = 0;
	bmi.bmiHeader.biClrImportant = 0;
	bmi.bmiHeader.biBitCount = 32;
	//SetDIBits(dc, bit, 0, hDds.dwWidth, buffer, &bmi, DIB_RGB_COLORS);
	::ReleaseDC(m_hWnd, dc);
	Picture.SetBitmap(bit);

	fclose(dds);
	delete[] buffer;
}
Все открываемые текстуры будут DDS DXT1

Последний раз редактировалось crymchanin; 15.02.2012 в 18:34.
crymchanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать эскиз UserControl во всплывающем окне? Сделать всплывающие окна, как в Windows 7 AnutkaSolnce Windows Forms 1 09.06.2011 07:30
Как отобразить ячейку с датой? AK BULLETS Общие вопросы Delphi 0 18.05.2010 11:20
как отобразить на диаграмме время GUSEVV Microsoft Office Access 2 26.08.2009 12:16
Как в excel отобразить формулу как текст ? mihhon Microsoft Office Excel 3 03.06.2009 22:05
Как отобразить .xls в DBGrid? feel Помощь студентам 3 12.10.2008 19:21