Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как из двух изображений получить TGA с альфа каналом? [Delphi]


Страницы:   1 2

Домик ©   (2007-06-19 13:36:00) 

Подскажите, как можно из двух соображений получить tga с альфа каналом? Хотелось бы сделать оптимизацию дистрибутива игры за счет пережатия всех графических ресурсов в jpeg (tga занимает намного больше места), а потом на этапе загрузки игры  (или даже на этапе установки игры) генерировать из них текстуры с альфа каналом. К тому же есть много изображений, у которых контур одинаковый и для них можно было бы вообще использовать одну картинку с альфой.

Искал в Инете подобные решения, но ничего не нашлось. В основном примеры как прочитать и отобразить tga. А хотелось бы именно работу с tga. Может быть, есть где-то уже готовые модули, описание или статьи по этой теме? Буду премного благодарен :)


Sapersky   (2007-06-20 22:22:00) [21]

Хорошо, согласен, вопрос корявый. Только не пойму в чем его корявость

Вопрос нормально сформулирован.
Другое дело, что описанную проблему можно решить гораздо проще, безо всяких переупаковок на этапе установки и тем более при загрузке (последнее - вообще кошмар, хотя я сам, каюсь, грузил так jpeg'и... 7 лет назад). Т.е. под "правильно формулируется" я имел в виду "на самом деле вам нужно".

Но хозяин - барин, считает, что нужен ему tga - будет ему tga:
http://megalib.com/books/351/ch07/07-01.html#Heading1


@!!ex_   (2007-06-20 20:32:00) [22]

> Ты имеешь в виду ситуацию, когда разные края текстуры имеют
> разные цвета? Если да, то в этом случае под каждый край,
> фон закрашивается наиболее подходящим цветом.

Те надо этот геморой?
А текстурщикам твоим? :))


> Да, ключевое слово практически. У bmp нет никакого сжатия
> и естественно альфа канала тоже нет.

tga использует rle сжатие. Практически не применимое к текстурам.
bmp кстати тоже может использовать сжатие, так что они вообще идеентичны.
там даже принцип хранения дампа одинаковый, снизу вверх и в виде BGR.


> Это уже не принципиально, в коде что jpeg, что bmp будут
> приведены к единому типу TBitmap, а вот как там уже из этого
> получить tga? Впрочем, я уже написал, что буду тщательнее
> разбирать формат tga, уже нашел пару довольно подробных
> примеров работы с tga. И еще попробую поковырять формат
> png.

Не. Битмап тоже надо преобразовывать.

ИМХО я бы рассмотрел два варианта:
1) свой внутренний формат, который будет хранить данные в удобном тебе виде.
RGB со сдатием + A
2) че нить просто типа png юзать. Например через DevIL. Если найдешь какую нить другую более удобную либу - делись. :)


Домик   (2007-06-20 19:46:00) [23]

> Хм. А если эффект из нескольких цветов состоит, как цвет фона подобрать? :))

Ты имеешь в виду ситуацию, когда разные края текстуры имеют разные цвета? Если да, то в этом случае под каждый край, фон закрашивается наиболее подходящим цветом.

> Если вдруг не в курсах:
png - формат со сжатием и прозрачностью.


Я в курсе. Только как-то в голову не приходило попробовать использовать png в качестве текстур. Спасибо за наводку, уже подумываю о нем как об альтернативном варианте.

>Я повторю еще раз:
tga и bmp - практически одно и тоже.


Да, ключевое слово практически. У bmp нет никакого сжатия и естественно альфа канала тоже нет.

> И где здесь речь об jpeg? :))))

Это уже не принципиально, в коде что jpeg, что bmp будут приведены к единому типу TBitmap, а вот как там уже из этого получить tga? Впрочем, я уже написал, что буду тщательнее разбирать формат tga, уже нашел пару довольно подробных примеров работы с tga. И еще попробую поковырять формат png.


@!!ex_   (2007-06-20 18:56:00) [24]

Хм. А если эффект из нескольких цветов состоит, как цвет фона подобрать? :))

P.S>
Если вдруг не в курсах:
png - формат со сжатием и прозрачностью.

Я повторю еще раз:
tga и bmp - практически одно и тоже.

в) нужно texture.bmp склеить с alpha.bmp и получить результат maskedTexture.tga.
И где здесь речь об jpeg? :))))
склеив bmp и bmp, ты получишь tga размером равным сумме размеров. Чуть меньше, за счет обединения заголовков.


Домик   (2007-06-20 18:28:00) [25]

>  
2) Столкнулся с такой же идеей и пришел к png.
а) Не надо парится с совмещением картинок.


Я не парюсь с совмещением картинок, вся эта затея для попытки уменьшить дистрибутив игры.

> б) Текстурщики значительно лучше дружат с прозрачностью в png. Поскольку реализуется она обычными средствами  фотожопа. А Афльфа канал тгашный требует дополнительный усилий.

С этим никаких проблем не возникало.

>в) Блендинг тга работает кривее.(Во всяком случае у меня png текстура дает великолепнйы результат, а тга - в прозрачных участках добавляет к цвету текстуры еще и цвет фона. У png же, нет такого понятия как цвет фона вообще.)

Это легко лечится заданием фону необходимого цвета.

> 3) Вопрос у тебя реально не правильно сформулирован. И ты сам же вносишь сумятицы.

Хорошо, согласен, вопрос корявый. Только не пойму в чем его корявость, раз все понимают все что угодно только не то, что я имею в виду. Я идиот, убейте меня кто-нибудь! :)

> ТОгда не понятно при чем тут вообще tga.

При том, что мне нужно результат получить в формате tga. А теперь еще раз по пунктам:
а) есть изображение текстуры в texture.bmp
б) есть изображение альфа канала для текстуры в alpha.bmp
в) нужно texture.bmp склеить с alpha.bmp и получить результат maskedTexture.tga.

Теперь понятно? :)

> 4) Что мешает по статьям о загрузке tga разобраться как его сохранять? ПРинцип то один и тот же, что для чтения, что для записи.

Ничего не мешает, так и буду разбираться, так как топик какой-то флеймовый получился.

> 5) если ты генеришь свою картинку, что мешает генерить ее в свой внутреннй формат заточенный под свои нужды?

Задача уменьшить дистрибутив игры. Я хочу переупаковывать текстуры из jpg в tga во время установки игры, это удобно тем, что этот нужно будет выполнить всего один раз.


@!!ex_   (2007-06-20 17:04:00) [26]

1) bmp 24 бита не больше чем 24 бита tga. У них ваще дамп данных одинаково реализованный.
2) Столкнулся с такой же идеей и пришел к png.
 а) Не надо парится с совмещением картинок.
 б) Текстурщики значительно лучше дружат с прозрачностью в png. Поскольку реализуется она обычными средствами  фотожопа. А Афльфа канал тгашный требует дополнительный усилий.
 в) Блендинг тга работает кривее.(Во всяком случае у меня png текстура дает великолепнйы результат, а тга - в прозрачных участках добавляет к цвету текстуры еще и цвет фона. У png же, нет такого понятия как цвет фона вообще.)
3) Вопрос у тебя реально не правильно сформулирован. И ты сам же вносишь сумятицы.
Я лично понял также как и [6] Sapersky   (20.06.07 15:38).
ТОгда не понятно при чем тут вообще tga.
4) Что мешает по статьям о загрузке tga разобраться как его сохранять? ПРинцип то один и тот же, что для чтения, что для записи.
5) если ты генеришь свою картинку, что мешает генерить ее в свой внутреннй формат заточенный под свои нужды?
6) ...
7) ...
8) ... и еще много много вопросов ...


Домик   (2007-06-20 16:17:00) [27]

> Подозреваю, что правильно вопрос формулируется так: как сформировать из 2-х картинок 32-битный битмап (в памяти)

Мы тут формулировкой вопросов занимаемся или поиском ответов? Я думаю, что вопрос вполне понятно поставлен... или я ошибаюсь? Есть два изображения: первое оригинальная текстура, второе альфа канал для текстуры - нужно получить из этих двух изображений формат tga с альфой.

[оффтопик] Извиняюсь за резкость, но тут порой вопросы задают вообще без какой-либо формулировки и при этом авторам дают ответы. И я немного удивился, что довольно внятный вопрос с описанием преследуемой цели ваши натренированные телепатические способности не способны разобрать :) [оффтопик]

> и из него сделать текстуру OGL.

Интересует именно работа с tga без ogl так как хотелось бы сделать переупаковку текстур на этапе установки игры, т.е. единоразово.

> Брюзжание по поводу неумения glscene'ров вычислить 2+2 без помощи великой и могучей библиотеки

Подколол :) Но GLScene тут не причем. Кроме этого раньше были попытки редактировать tga, к примеру, перекрашивать текстуру в нужный цвет, но при этом альфа канал пропадал. Искал примеры работы с tga форматом, редактирование и прочее, но ничего толком не нашлось, можно предположить, что плохо искал, если так, то ткните носом, где можно найти... Буду благодарен.


Sapersky   (2007-06-20 15:38:00) [28]

Как из двух изображений получить TGA с альфа каналом?

Подозреваю, что правильно вопрос формулируется так: как сформировать из 2-х картинок 32-битный битмап (в памяти) и из него сделать текстуру OGL.

<skipped>Брюзжание по поводу неумения glscene'ров вычислить 2+2 без помощи великой и могучей библиотеки</skipped>


МистерТ   (2007-06-20 14:21:00) [29]

Лучший (ИМХО) способ:
- основное изображение хранить в цветном jpeg.
- маску альфа-канала хранить в bmp с палитрой 256 оттенков серого (или вообще ч/б, т.е. два цвета), соответственно индекс цвета в палитре - степень прозрачности.


Домик   (2007-06-20 12:34:00) [30]

> Не очень понял, в чем же проблема...

Надо внимательнее читать ;)
Я еще в заголовке написал "Как из двух изображений получить TGA с альфа каналом?"... В этом и проблема, не знаю, как работать с tga, все те примеры, что попадались, в основном показывают, как его прочитать и отобразить...

> Хотя в большинстве случаев
подходит такой подход: альфу рассчитавать
из самих цветов картинки.


Мне такой подход не подходит, мне нужно именно из двух изображений.


Rial   (2007-06-20 04:36:00) [31]

Не очень понял, в чем же проблема...
Ну так и пережми все изображения в JPEG, делов то !
Надо хванить альфу отдельно - да ради бога,
делай 2 JPEG-а. Хотя в большинстве случаев
подходит такой подход: альфу рассчитавать
из самих цветов картинки. Нипример, чем больше
сумма цветов, тем больше альфа, т.е. черный будет прозрачным ...


Домик   (2007-06-19 23:32:00) [32]

А чем он меня должен устраивать? В bmp изображения занимают еще больше чем в tga и при этом не имеют альфа канала. Мне же все эти манипуляции нужны в большей степени для того, чтобы в разы сократить дистрибутив игры, пережав текстуры в jpg. И еще, к примеру использовать одно изображение альфа канала для разных текстур с идентичным контуром, уже на этом можно с экономить прилично места.


Yashin   (2007-06-19 20:01:00) [33]

А чем тебя БМП не устраивает?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо