работа с DevIL

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#1 Сообщение 06.05.2009, 11:33

нужна помощь с DevIL

дело в том что код написан под 24 битную картинку, а мне нужна 8 битная
// DevIL likes the image data upside down.
FlipImage(lpImageData, vlImageGetWidth(), vlImageGetHeight(), DestFormat == IMAGE_FORMAT_RGBA8888 ? 4 : 3);


// Create a new image with the converted image data in DevIL.
if(!ilTexImage(vlImageGetWidth(), vlImageGetHeight(), 1, DestFormat == IMAGE_FORMAT_RGBA8888 ? 4 : 3, DestFormat == IMAGE_FORMAT_RGBA8888 ? IL_RGBA : IL_RGB, IL_UNSIGNED_BYTE, lpImageData))
{
free(lpImageData);
printf(" Error creating %s file.\n\n", lpExportFormat);
return;
}
если я делаю

FlipImage(lpImageData, vlImageGetWidth(), vlImageGetHeight(), 1);

и

if(!ilTexImage(vlImageGetWidth(), vlImageGetHeight(), 1, 1, IL_RGBA, IL_UNSIGNED_BYTE, lpImageData))

то картинка получается 8 битная, но при этом с испорченным изображением

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#2 Сообщение 07.05.2009, 14:01

UP

Nikk1488
VIP
VIP
Сообщения: 2492
Зарегистрирован: 01.01.2008
Поблагодарили: 4 раза
Контактная информация:

#3 Сообщение 07.05.2009, 14:17

Лучше обратись на форум разработчиков этой библиотеки.
[txtspoil]Adiost и я - гей шлюхи!!![/txtspoil]

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#4 Сообщение 07.05.2009, 15:35

Мне на геймдеве сообщили что OpenIL не умеет сохранять картинки с палитрой

подскажите альтернативу DevIL, что бы не мучатся с написанием кода для работы с bmp файлом

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#5 Сообщение 07.05.2009, 17:19

MSDN & GDI plus не помогут?

Аватара пользователя
Vit_amiN
Супермодератор
Супермодератор
Сообщения: 2509
Зарегистрирован: 01.02.2007
Откуда: Over Old Hills
Благодарил (а): 15 раз
Поблагодарили: 91 раз

#6 Сообщение 07.05.2009, 19:56

fire64
Imagine! Viewer - великолепная весчь.
Изображение

Мои русификаторы и другие полезные файлы здесь
ЗАПОМНИТЕ, ПОИСК — БЛИЖАЙШИЙ ПУТЬ К ИСТИНЕ!

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#7 Сообщение 07.05.2009, 20:25

Vit_amiN писал(а):fire64
Imagine! Viewer - великолепная весчь.
кинь ссылку на Imagine! Viewer

Аватара пользователя
Vit_amiN
Супермодератор
Супермодератор
Сообщения: 2509
Зарегистрирован: 01.02.2007
Откуда: Over Old Hills
Благодарил (а): 15 раз
Поблагодарили: 91 раз

#8 Сообщение 07.05.2009, 20:38

Вот, сайт разработчика программы: http://www.nyam.pe.kr/
Изображение

Мои русификаторы и другие полезные файлы здесь
ЗАПОМНИТЕ, ПОИСК — БЛИЖАЙШИЙ ПУТЬ К ИСТИНЕ!

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#9 Сообщение 07.05.2009, 21:53

Vit_amiN писал(а):Вот, сайт разработчика программы: http://www.nyam.pe.kr/
сервак в дауне


нашел код для конвертирования из 8 битной картинки в 24 битную

Код: Выделить всё

BOOL Convert256To24 (char *fin, char *fout)
{
	BITMAPFILEHEADER bfh;
	BITMAPINFOHEADER bih;
	int Width, Height;
	RGBQUAD Palette[256];
	BYTE *inBuf;
	RGBTRIPLE *outBuf;
	HANDLE hIn, hOut;
	DWORD RW;
	DWORD OffBits;
	int i, j;

	hIn = CreateFile (fin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
	if (hIn == INVALID_HANDLE_VALUE)
		return FALSE;

	hOut = CreateFile (fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
	if (hOut == INVALID_HANDLE_VALUE)
	{
		CloseHandle (hIn);
		return FALSE;
	}

	// Ïðî÷òåì äàííûå
	ReadFile (hIn, &bfh, sizeof(bfh), &RW, NULL);
	ReadFile (hIn, &bih, sizeof(bih), &RW, NULL);
	ReadFile (hIn, Palette, 256 * sizeof(RGBQUAD), &RW, NULL);

	// Óñòàíîâèì óêàçàòåëü íà íà÷àëî ðàñòðà
	SetFilePointer (hIn, bfh.bfOffBits, NULL, FILE_BEGIN);

	Width = bih.biWidth;
	Height = bih.biHeight;
	OffBits = bfh.bfOffBits;

	// Âûäåëèì ïàìÿòü
	inBuf = new BYTE [Width];
	outBuf = new RGBTRIPLE [Width];

	// Çàïîëíèì çàãîëîâêè
	bfh.bfOffBits = sizeof (bfh) + sizeof (bih);	// Íå áóäåì ïèñàòü ïàëèòðó
	bih.biBitCount = 24;
	bfh.bfSize = bfh.bfOffBits + 4 * Width * Height + Height * (Width % 4);		// Ðàçìåð ôàéëà
	// À îñòàëüíîå íå ìåíÿåòñÿ

	// Çàïèøåì çàãîëîâêè
	WriteFile (hOut, &bfh, sizeof(bfh), &RW, NULL);
	WriteFile (hOut, &bih, sizeof(bih), &RW, NULL);

	// Íà÷íåì ïðåîáðàçîâûâàòü
	for (i = 0; i < Height; i++)
	{
		ReadFile (hIn, inBuf, Width, &RW, NULL);
		for (j = 0; j < Width; j++)
		{
			outBuf[j].rgbtRed = Palette[inBuf[j]].rgbRed;
			outBuf[j].rgbtGreen = Palette[inBuf[j]].rgbGreen;
			outBuf[j].rgbtBlue = Palette[inBuf[j]].rgbBlue;
		}
		WriteFile (hOut, outBuf, sizeof(RGBTRIPLE) * Width, &RW, NULL);

		// Ôèãíÿ äëÿ âûðàâíèâàíèÿ
		WriteFile (hOut, Palette, Width % 4, &RW, NULL);
		SetFilePointer (hIn, (3 * Width) % 4, NULL, FILE_CURRENT);
	}

	delete inBuf;
	delete outBuf;
	CloseHandle (hIn);
	CloseHandle (hOut);

	return TRUE;
}
теперь пытаюсь сделать наоборот

запутался с

Код: Выделить всё

		for (j = 0; j < Width; j++)
		{
			outBuf[j].rgbtRed = Palette[inBuf[j]].rgbRed;
			outBuf[j].rgbtGreen = Palette[inBuf[j]].rgbGreen;
			outBuf[j].rgbtBlue = Palette[inBuf[j]].rgbBlue;
		}
пытаюсь понять как развернуть код в обратную сторону

Аватара пользователя
Vit_amiN
Супермодератор
Супермодератор
Сообщения: 2509
Зарегистрирован: 01.02.2007
Откуда: Over Old Hills
Благодарил (а): 15 раз
Поблагодарили: 91 раз

#10 Сообщение 07.05.2009, 23:33

fire64
Нифига не дауне, он за последние полтора года не разу не ложился. Может, корбина шалит?
Изображение

Мои русификаторы и другие полезные файлы здесь
ЗАПОМНИТЕ, ПОИСК — БЛИЖАЙШИЙ ПУТЬ К ИСТИНЕ!

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#11 Сообщение 08.05.2009, 01:07

хм, у меня сайт не открывается,сейчас через прокси попробую

Аватара пользователя
Vit_amiN
Супермодератор
Супермодератор
Сообщения: 2509
Зарегистрирован: 01.02.2007
Откуда: Over Old Hills
Благодарил (а): 15 раз
Поблагодарили: 91 раз

#12 Сообщение 08.05.2009, 01:09

Ну как, открылся?
Изображение

Мои русификаторы и другие полезные файлы здесь
ЗАПОМНИТЕ, ПОИСК — БЛИЖАЙШИЙ ПУТЬ К ИСТИНЕ!

Аватара пользователя
Kick-Bum
Полковник
Полковник
Сообщения: 2311
Зарегистрирован: 29.04.2008
Откуда: Behind you
Поблагодарили: 6 раз
Контактная информация:

#13 Сообщение 08.05.2009, 01:11

сайт действительно работает...

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#14 Сообщение 08.05.2009, 01:21

Vit_amiN, да открылся, а ты уверен что Imagine! Viewer это именно библиотека, а не какая-то программа ?

сайт не открывается но корбина тут не причем, упал маршрутизатор "Корейского сетевого информационного сервера"

а корбиновский трафик в Корее идет именно через него

Аватара пользователя
Vit_amiN
Супермодератор
Супермодератор
Сообщения: 2509
Зарегистрирован: 01.02.2007
Откуда: Over Old Hills
Благодарил (а): 15 раз
Поблагодарили: 91 раз

#15 Сообщение 08.05.2009, 02:15

Это программа, и её библиотеку можно заюзать.
Изображение

Мои русификаторы и другие полезные файлы здесь
ЗАПОМНИТЕ, ПОИСК — БЛИЖАЙШИЙ ПУТЬ К ИСТИНЕ!

Ответить