Здравствуйте Andrey A. Ugolnik, Вы писали:
AAU>Прывит!
AAU>Как произвести подобное преобразование. У меня есть имидж (.TGA 24 бита), мне нужно вывести на DirectDraw поверхность в 32 бита.
Можешь воспользоватся сторонней библиотекой для работы с имиджами :о) Например FreeImage. Ну а потом перекинь ее в поверхность DirectDrawSurface. (с учетом питча и т.п.)
Вроде бы так, попробуй, я не уверен на все 100% но я бы пошел в этом направлении (знаю формат tga, поэтому не могу сказать можно ли обойтись без FreeImage или т.п.)
Вобщем если получится — скажи, плз
Здравствуйте Andrey A. Ugolnik, Вы писали:
AAU>Здравствуйте Lostar, Вы писали:
L>>:о))) Я хотел сказать: ... не знаю формат tga ... sorry
AAU>Я знаю формат тарги, но это мне ничего не дает.
Тебе надо 24bit TGA > 32bit Bitmap ?
А GDI+ не пробовал?
L>>>:о))) Я хотел сказать: ... не знаю формат tga ... sorry
AAU>>Я знаю формат тарги, но это мне ничего не дает.
Z>Тебе надо 24bit TGA > 32bit Bitmap ?
Да.
Z>А GDI+ не пробовал?
Нет, не пробовал. Для меня это не подходит.
И еще вопрос, как сделать преобразование из 24 бит в 16, но с дизеренгом. Иначе появляются не плавные переходы.
FIBITMAP *FreeImage_LoadTARGA(const char *filename, int flags = TARGA_DEFAULT);
Loads the given TARGA file into a FreeImage bitmap. If the file is loaded successfully, memory for it is allocated and a bitmap pointer is returned. If the file couldn't be loaded, FreeImage_LoadTARGA returns NULL.
Flags defaults to TARGA_DEFAULT. The flags parameter can be passed the following values to change the behaviour of the load plugin:
FIBITMAP *dib = FreeImage_LoadTARGA("test.tga");
FIBITMAP *dib = FreeImage_LoadTARGA("test.tga", TARGA_LOAD_RGB888);
Value Meaning
TARGA_LOAD_RGB888 If the TARGA file is 32-bit, it is automatically converted to 24-bit.
TARGA_LOAD_RGB555 If the TARGA file is 16-bit, it is not automatically converted to 24-bit
Спасибо Lostar, но мне не подходит вариант с FreeImage.
Тем более, что загрузку тарги я уже давно написал в своем движке. Осталось ее правильно преобразовать к примари сурфейсу. И если примари сурфейс 16 бит, то сделать ее и дизеринг.
А по поводу 32 бит я хотел узнать только что там где?
Пример 16 бит — R5G6B5, или R5G5B5.
Пример 24 бита — R8G8B8.
А вот что и как у 32 бит?
L>FreeImage:
L>FreeImage_LoadTARGA L>
FIBITMAP *FreeImage_LoadTARGA(const char *filename, int flags = TARGA_DEFAULT);
L>Loads the given TARGA file into a FreeImage bitmap. If the file is loaded successfully, memory for it is allocated and a bitmap pointer is returned. If the file couldn't be loaded, FreeImage_LoadTARGA returns NULL. L>Flags defaults to TARGA_DEFAULT. The flags parameter can be passed the following values to change the behaviour of the load plugin: L>FIBITMAP *dib = FreeImage_LoadTARGA("test.tga"); L>FIBITMAP *dib = FreeImage_LoadTARGA("test.tga", TARGA_LOAD_RGB888);
L>Value Meaning L>TARGA_LOAD_RGB888 If the TARGA file is 32-bit, it is automatically converted to 24-bit. L>TARGA_LOAD_RGB555 If the TARGA file is 16-bit, it is not automatically converted to 24-bit
L>FreeImage_ConvertTo32Bits L>
Здравствуйте Andrey A. Ugolnik, Вы писали:
AAU>А по поводу 32 бит я хотел узнать только что там где? AAU>Пример 16 бит — R5G6B5, или R5G5B5. AAU>Пример 24 бита — R8G8B8. AAU>А вот что и как у 32 бит?
Да проще некуда: A8R8G8B8, где A — либо Alpha (прозрачность), либо неиспользуемый байт для выравнивания