Вверх ↑
Этот топик читают: Гость
Ответов: 49
Рейтинг: 11
#1: 2011-01-15 15:45:58 ЛС | профиль | цитата
Здравствуйте,
работая с графикой в Hiasm обнаружил, что наложение изображения поверх другого с использованием альфа-канала происходит некорректно.
Выложил http://forum.hiasm.com/forum_serv.php?q=56&id=2071 с демонстрацией разницы работы альфа-канала в Hiasm и Фотошопе.
Если я неправ, растолкуйте.
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2011-01-15 16:31:50 ЛС | профиль | цитата
vovcheck писал(а):
в Hiasm и Фотошопе

Нашел что сравнить -- Фотошоп и HiAsm. То, что может делать Фотошоп, никогда не сможет делать HiAsm, по крайней мере, пакет Windows
карма: 22

0
Ответов: 49
Рейтинг: 11
#3: 2011-01-15 16:40:00 ЛС | профиль | цитата
Я не собираюсь сопоставлять их графические возможности. За 27 лет моей работы с графикой понятие Alpha всегда определялось как степень прозрачности. Здесь же Alpha смешивается с RGB, а затем уже накладывается. В моем примере это видно по состоянию нижней левой четверти, т.е. происходит наложение тех пиксел, у которых Alpha=0. Разве это корректно?
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2011-01-15 16:53:10 ЛС | профиль | цитата
vovcheck писал(а):
Здесь же Alpha смешивается с RGB, а затем уже накладывается

А кто такое сказал -- работает стандартная API функция ОС, как она работать должна правильно, спросить надо Microsoft. Да, кстати, обязательное условие работы с этими компонентами -- это наличие только 32 битных картинок. Смешивать 24 бита и 32 бита не получится
карма: 22

0
Ответов: 8886
Рейтинг: 823
#5: 2011-01-15 17:10:26 ЛС | профиль | цитата
nesco писал(а):
То, что может делать Фотошоп, никогда не сможет делать HiAsm
nesco, Фотошоп -- это математика, скрытая в его инструментах, а математика в HiAsm-е есть.
карма: 19

0
Ответов: 49
Рейтинг: 11
#6: 2011-01-15 17:23:14 ЛС | профиль | цитата
Хорошо, я сделал обе исходные 32 битными, финал тот-же.
стандартная API функция ОС

Похоже Microsoft знает только метод Additive, что и является причиной результата. Прявильней при совмещении графики с альфой использовать Substructive.

An additive merge assumes that both foreground and background images are pre-multiplied, meaning that the pixels in the color channels have been multiplied against the pixels in the alpha channel. The result is that transparent pixels are always black, since any number multiplied by a 0 is always going to be 0.

If the images are not pre-multiplied then usually all that is required is a subtractive merge. This method uses the alpha channel from the foreground to cut, or subtract, a hole from the background image. Simply fit the foreground image into that hole. That is known as a subtractive merge.


Подскажите, раз тот способ не работает, как поступить, если надо наложить одно изо 24бит на другое 24бит взяв альфу из третьего изо 8 бит (или 24). В рамках Hiasm я пока вижу способ использования альфы, уже прописанной в картинке.
------------ Дoбавленo в 17.23:
Вот, кстати, математика для каждого пиксела:
Additive:
R1 + R2 * A2
G1 + G2 * A2
B1 + B2 * A2

Substructive:
R1 * (255 - A2) + R2 * A2
G1 * (255 - A2) + G2 * A2
B1 * (255 - A2) + B2 * A2
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#7: 2011-01-15 22:09:23 ЛС | профиль | цитата
vovcheck писал(а):
В рамках Hiasm я пока вижу способ использования альфы, уже прописанной в картинке

А кто мешает наложить альфа маску на 32-х битную картинку средствами HiAsm-a
------------ Дoбавленo в 17.52:
Отконвертировать простую картинку 24 битп в 32 бта можно при помощи AlphaShadow при DeepBlur=0
------------ Дoбавленo в 18.08:
Да, действительно с масками фигня получается, на белый цвет она не накладывапется
------------ Дoбавленo в 18.39:
Остается одно -- подумать, как переписать функцию AlphaBlend
------------ Дoбавленo в 22.09:
Детальная разборка картинок показала, что созданная в фотошопе вторая картинка не удовлетворяет условию прозрачности элементов HiAsm. Вот пример с нормально созданной для HiAsm-a второй картинкой. И никаких артефактов. Правильно я написал, что нельзя сравнивать две совершенно разные программы, для одной надо одно, для другой -- другое

alpha_033.sha


карма: 22

0
файлы: 1alpha_033.sha [234KB] [474]
Ответов: 49
Рейтинг: 11
#8: 2011-01-16 22:35:46 ЛС | профиль | цитата
Спасибо, nesco, я понял свою ошибку.
------------ Дoбавленo в 22.35:
Используя стандартные средства Hiasm возможен только Аддитивный метод.
Жаль...
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#9: 2011-01-16 22:40:05 ЛС | профиль | цитата
vovcheck писал(а):
Используя стандартные средства Hiasm возможен только Аддитивный метод

Это -- да, к сожалению, тк функция альфа-канала стандартная. Кстати, а какое преимущество у Substructive метода наложения альфы
карма: 22

0
Ответов: 49
Рейтинг: 11
#10: 2011-01-16 22:48:21 ЛС | профиль | цитата
Я работаю в телепроизводстве, там Альфа суть атрибут прозрачности при наложении на графику или видео, причём она (Альфа) никои образом не зависит от цветовой составляющей наложенной графики (или даже наложенного видео). Ну уж так принято.
------------ Дoбавленo в 22.48:
Часто (как у меня в данном случае) возникают задачи менять наложенную графику, при этом Альфа либо остаётся та же, либо вызывается из шаблона, из другого источника. Вплоть до оперативного использования библиотеки Альфа-картинок.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#11: 2011-01-16 22:55:53 ЛС | профиль | цитата
vovcheck писал(а):
никои образом не зависит от цветовой составляющей наложенной графики

А разве так не везде принято, что альфа от цвета не зависит
vovcheck писал(а):
либо вызывается из шаблона

А что, не получается средствами HiAsm-a наложить 32-х битную альфу без рисунка (R,G,B,A = 0,0,0,X) на 32-х битный рисунок без альфы (R,G,B,A = X,X,X,0)
карма: 22

0
Ответов: 49
Рейтинг: 11
#12: 2011-01-16 22:59:10 ЛС | профиль | цитата
наложить 32-х битную альфу без рисунка (R,G,B,A = 0,0,0,X) на 32-х битный рисунок без альфы (R,G,B,A = X,X,X,0)

Простите, с годами мозг поржавел, спасибо.
Сейчас поковыряю.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#13: 2011-01-16 23:00:36 ЛС | профиль | цитата
Я тут уже подумываю о создании конверторов для осуществления таких преобразований. А то приходится делать все эти преобразования с альфой в чужих прогах. Наложить-то альфу можно, но вот делать ее из любого рисунка или его составляющей в HiAsm-e нельзя
карма: 22

0
Ответов: 49
Рейтинг: 11
#14: 2011-01-17 00:31:10 ЛС | профиль | цитата
Пока не выходит.
А возможно ли работать с картинкой как с массивом или матрицей? Ведь тогда возможна попиксельная работа, возможно применение любых пользовательских фильтров.
------------ Дoбавленo в 00.31:
StreamConverter - это не оно ли?
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#15: 2011-01-17 00:37:45 ЛС | профиль | цитата
vovcheck писал(а):
А возможно ли работать с картинкой как с массивом или матрицей? Ведь тогда возможна попиксельная работа, возможно применение любых пользовательских фильтров

Да сделать-то такое можно, через Img_GetPoint, но вот скорость работы такого алгоритма, убьет все желание этим пользоваться
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)