Як з двох зображень отримати tga з альфа каналом

Як з двох зображень отримати TGA з альфа каналом?

Підкажіть, як можна з двох міркувань отримати tga з альфа каналом? Хотілося б зробити оптимізацію дистрибутива гри за рахунок стискання всіх графічних ресурсів в jpeg (tga займає набагато більше місця), а потім на етапі завантаження гри # XA0; (або навіть на етапі установки гри) генерувати з них текстури з альфа каналом. До того ж є багато зображень, у яких контур однаковий і для них можна було б взагалі використовувати одну картинку з альфою.

Шукав в Інеті подібні рішення, але нічого не знайшлося. В основному приклади як прочитати і відобразити tga. А хотілося б саме роботу з tga. Може бути, є десь вже готові модулі, опис або статті по цій темі? Буду щиро вдячний :)

А чим тебе БМП не влаштовує?

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

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

> Не дуже зрозумів, в чому ж проблема.

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

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

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

Як з двох зображень отримати TGA з альфа каналом?

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

Бурчання з приводу невміння glscene "рів обчислити 2 + 2 без допомоги великої і могутньої бібліотеки

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

Ми тут формулюванням питань займаємося або пошуком відповідей? Я думаю, що питання цілком зрозуміло поставлений. Або я помиляюсь? Є два зображення: перше оригінальна текстура, друге альфа канал для текстури - потрібно отримати з цих двох зображень формат tga з альфою.

> І з нього зробити текстуру OGL.

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

> Бурчання з приводу невміння glscene "рів обчислити 2 + 2 без допомоги великої і могутньої бібліотеки

Підколов :) Але GLScene тут ні до чого. Крім цього раніше були спроби редагувати tga, наприклад, перефарбовувати текстуру в потрібний колір, але при цьому альфа канал пропадав. Шукав приклади роботи з tga форматом, редагування та інше, але нічого толком не знайшлося, можна припустити, що погано шукав, якщо так, то ткніте носом, де можна знайти. Буду вдячний.

> # XA0;
2) Зіткнувся з такою ж ідеєю і прийшов до png.
а) Не треба париться з суміщенням картинок.

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

> Б) Текстурщик значно краще дружать з прозорістю в png. Оскільки реалізується вона звичайними засобами # XA0; фотожопа. А Афльфа канал тгашний вимагає додатковий зусиль.

З цим ніяких проблем не виникало.

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

Це легко лікується завданням фону необхідного кольору.

> 3) Питання у тебе реально не правильно сформульований. І ти сам же вносиш сум'яття.

Добре, згоден, питання корявий. Тільки не зрозумію в чому його кострубатість, раз все розуміють всі що завгодно тільки не те, що я маю на увазі. Я ідіот, вбийте мене хто-небудь. )

> Тоді не зрозуміло до чого тут взагалі tga.

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

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

> 5) якщо ти генерітся свою картинку, що заважає генерувати її в свій внутрішній формат заточений під свої потреби?

Завдання зменшити дистрибутив гри. Я хочу переупаковувати текстури з jpg в tga під час установки гри, це зручно тим, що цей потрібно буде виконати всього один раз.

Хм. А якщо ефект з декількох квітів складається, як колір фону підібрати. ))

P.S>
Якщо раптом не в курсах:
png - формат із стисненням і прозорістю.

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

в) потрібно texture.bmp склеїти з alpha.bmp і отримати результат maskedTexture.tga.
І де тут мова про jpeg. ))))
склеївши bmp і bmp, ти отримаєш tga розміром рівним сумі розмірів. Трохи менше, за рахунок обєднання заголовків.

> Хм. А якщо ефект з декількох квітів складається, як колір фону підібрати. ))

Ти маєш на увазі ситуацію, коли різні краю текстури відображаються різними кольорами? Якщо так, то в цьому випадку під кожен край, фон закрашивается найбільш відповідним кольором.

> Якщо раптом не в курсах:
png - формат із стисненням і прозорістю.

Я в курсі. Тільки якось в голову не приходило спробувати використовувати png як текстур. Дякую за наводку, вже подумую про нього як про альтернативний варіант.

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

Так, ключове слово практично. У bmp немає ніякого стиснення і природно альфа каналу теж немає.

> І де тут мова про jpeg. ))))

Це вже не принципово, в коді що jpeg, що bmp будуть приведені до єдиного типу TBitmap, а ось як там вже з цього отримати tga? Втім, я вже написав, що буду ретельніше розбирати формат tga, вже знайшов пару досить докладних прикладів роботи з tga. І ще спробую поколупати формат png.

> Ти маєш на увазі ситуацію, коли різні краю текстури мають
> Різні кольори? Якщо так, то в цьому випадку під кожен край,
> Фон закрашивается найбільш відповідним кольором.

Ті треба цей геморой?
А Текстурщик твоїм. ))


> Так, ключове слово практично. У bmp немає ніякого стиснення
> І природно альфа каналу теж немає.

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


> Це вже не принципово, в коді що jpeg, що bmp будуть
> Приведені до єдиного типу TBitmap, а ось як там вже з цього
> Отримати tga? Втім, я вже написав, що буду ретельніше
> Розбирати формат tga, вже знайшов пару досить докладних
> Прикладів роботи з tga. І ще спробую поколупати формат
> Png.

Чи не. Бітмапами теж треба перетворювати.

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

Добре, згоден, питання корявий. Тільки не зрозумію в чому його кострубатість

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

> @ !! ex_ # XA0; (20.06.07 20:32) [12]
> Ті треба цей геморой?
> А Текстурщик твоїм. ))

Це вже з розряду звички. Що тут поробиш, раз у tga така "фіча", ніхто не скаржився :) Зараз ось потрібно було зробити png текстуру для експериментів, і експортуючи її з psd в png виникли деякі незручності зі створенням альфи, просто тому що спочатку вона малювалася під tga. Загалом, на смак і колір. )

> Tga використовує rle стиснення. Практично не застосовується до текстур.
> Bmp до речі теж може використовувати стиснення, так що вони взагалі
> Ідеентічни.

А як же альфа канал? А в цілому хід думок зрозумів і в конкретному випадку не є принциповим ніж bmp відрізняється від tga :)

> ІМХО я б розглянув два варіанти:

Дякую за наведення, буду пробувати.

> Sapersky # XA0; (20.06.07 22:22) [13]
> Інша справа, що описану проблему можна вирішити набагато простіше, без
> Всяких переупаковок на етапі установки і тим більше при завантаженні
>. Тобто під "правильно формулюється" я мав на увазі "насправді
> Вам потрібно ".

Добре. Які найбільш оптимальні рішення, на вашу думку, можна використовувати для такого завдання? Або під більш оптимальним рішенням як раз і малося на увазі: "сформувати з 2-х картинок 32-бітний бітмапами (в пам'яті) і з нього зробити текстуру OGL."?

За посилання дякую, таке досить докладний опис формату мені не траплялося.

> А як же альфа канал? А в цілому хід думок зрозумів і в конкретному
> Разі не принципово ніж bmp відрізняється від tga :)

Я взагалі мав на увазі не наявність / відсутність альфи. А розміри і спосіб зберігання. )


> У bmp немає ніякого стиснення і природно альфа каналу теж
> Немає.

поспішаю вас порадувати, у bmp є альфаканал

Або під більш оптимальним рішенням як раз і малося на увазі: "сформувати з 2-х картинок 32-бітний бітмапами (в пам'яті) і з нього зробити текстуру OGL."?

Ну так.
Звичайне завантаження - завантажити картинку в пам'ять, розгорнути BGR (A) в RGB (A) (на кшталт це потрібно для створення OGL текстур), створити текстуру.
З альфою - завантажити 2 картинки, з'єднати їх в одну (і одночасно розгорнути), створити текстуру.
З іменами файлів найпростіше рішення - ім'я файлу альфа-текстури = ім'я файлу звичайної + "_a" або щось в цьому дусі.
Модулі для роботи з 32-бітними і іншими бітмапами на рівні Scanline начебто були в коморі - antonn підкаже де конкретно, він же їх і писав.

За посилання дякую, таке досить докладний опис формату мені не траплялося.

Там і код збереження є, якщо далі перегорнути.

> Sapersky # XA0; (21.06.07 16:00) [20]

Спасибі, посил зрозумів :) В цілому тут вже почерпнув для себе досить нової та корисної інформації по графічним форматам. Зараз потрібен час щоб у всьому розібратися і спробувати. У будь-якому випадку зроблю, як і хотів спочатку, щоб розібратися таки з tga, а далі спробую поколупати альтернативні варіанти зберігання графічних ресурсів. Ще раз спасибі за наведення :)

Так і є. Тільки текстури в tga розміром 512x512 майже під мегабайт займають місця. Хоча в jpg така ж текстура буде займати як мінімум раз в 5 менше і якщо зберігати саму текстуру і альфу окремо в jpg, то розміри дистрибутива скоротяться в рази. Для цього власне все це і затіяв.

> Це вже не принципово, в коді що jpeg, що bmp будуть
> Приведені до єдиного типу TBitmap, а ось як там вже з цього
> Отримати tga?

І навіщо знову приводити до формату зберігання зображення на диску? Щоб, завантаживши з файлу, знову привести все до того ж єдиного типу TBitmap (або які там структури відповідають структурам)?

так що уважніше прочитай # XA0; [6] Sapersky # XA0; (20.06.07 15:38). Бо в якому б форматі зображення не зберігалося в файлі, всі вони в підсумку приводяться до одного.


> В основному приклади як прочитати і відобразити tga. А хотілося
> Б саме роботу з tga

tga можна прочитати, в нього можна записати. Працювати з ним безглуздо. Бо це формат зберігання даних. ИМХО.


> В будь-якому випадку зроблю, як і хотів спочатку, щоб розібратися
> Таки з tga, а далі спробую поколупати альтернативні варіанти
> Зберігання графічних ресурсів


> Хоча в jpg така ж текстура буде займати як мінімум
> Раз в 5 менше і якщо зберігати саму текстуру і альфу окремо
> В jpg, то розміри дистрибутива скоротяться в рази. Для цього
> Власне все це і затіяв

Чи не відчуваєш протиріччя? tga як формат храненіенія тебе не влаштовує через розмір. Але ти вперто намагаєшся отримати tga, навіть якщо зберігати будещее в jpg. НАВІЩО? забудь про tga воообще і не згадуй. І Читай # XA0; [20] Sapersky # XA0; (21.06.07 16:00). там немає ні слова про tga, хоча є про текстури з альфа-каналом

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

> Чи не відчуваєш протиріччя? tga як формат храненіенія тебе не
> Влаштовує через розмір. Але ти вперто намагаєшся отримати tga, навіть
> Якщо зберігати будещее в jpg.

Ось моя цитата з останнього поста, прочитайте, будь ласка, уважно: "У будь-якому випадку зроблю, як і хотів спочатку, щоб розібратися таки з tga. А далі спробую поколупати альтернативні варіанти зберігання графічних ресурсів. Ще раз спасибі за наведення.". Вот такой вот я завзятий, є мета, хочу її досягти. І при цьому я згоден що, це швидше за все не оптимальний шлях, але і більш оптимальні варіанти, про які мені написав Sapersky і @ !! ex_ я обов'язково спробую.

які тут альтернативні - береш бітмапами, в ресурси пхати його стисненим (хоча б zlib), він і стиснеться і (для мене це головне) не втратить палітру, і працювати з ним простіше, ніж з png. Не розумію, навіщо так ганяються за форматами, які придумані для еденічних файлів в загальному користуванні.

zlib херово текстури стискає. вірніше практично зовсім не стискає.


> Zlib херово текстури стискає. вірніше практично зовсім
»Не стискає.

та НУ. )
1 456 018 байт файлів в bmp стиснулися в 128 501 байт

> Sapersky # XA0; (25.06.07 18:39) [30]
> Не, zlib, png і навіть jpeg - це несерйозно. Реальні пацани генерують
> Текстури при запуску а-ля 64-кб демо :)
> Сміх сміхом, але ось знайшов "текстурний движок", який це вміє:
Треба відразу генератор гри, параметри ставиш, а він тобі гру генерує :)

А що у справі, скріншоти красиві звичайно, але мені здається, що не кожен генератор може згенерувати то, що може намалювати художник. Нехай генеруються текстури будуть якісними і реалістичними, але частіше не реалізм вражає, а той графічний стиль, в якому виконана гра, а стиль цей у першу чергу задає саме художник. Гра в 64кб - це напевно неймовірно крута, але така гра бездушна, вона не має своєї родзинки як в графічному плані так і в іншому. имхо звичайно. )

До речі, якщо є проблеми зі збереженням 32-біт tga в фотошопі CS, CS2, тобто альфа-канал побивається, замініть "\ Plug-Ins \ File Formats \ Targa.8BI" (40кбайт) файлом з 7 версії.
І ніяких саморісованій альфа-каналу.

А png-вимагає бібліотеку, до того ж в png zip-стиснення, а воно гальмівних rle.
При прийнятніший обсягах png буде як jpg гальмувати.