标签: alphablending

OpenGL:如何在不改变目标alpha的情况下进行RGBA-> RGBA blitting

我有一个OpenGL RGBA纹理,我使用帧缓冲对象将另一个RGBA纹理加入其中.问题是,如果我使用通常的混合函数与 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), 结果blit导致目标纹理alpha更改,使其略微透明的alpha以前是1的地方.我希望目标表面alpha永远不会改变,但否则效果RGB值应该与GL_SRC_ALPHA和/ 完全一样GL_ONE_MINUS_SRC_ALPHA.因此,混合因子函数应该是(As,As,As,0)和(1-As,1-As,1-As,1).我怎样才能做到这一点?

opengl alphablending

2
推荐指数
1
解决办法
4049
查看次数

C#Alpha Blend透明PictureBox

我的表单上显示了一个网络摄像头源,并希望在其上绘制.我打算用图片框来做这件事,我发现PictureBox不支持真正的透明度,而只是它所用的表格的颜色.它也不支持alphablending,这是我希望它显示的方式,类似于可以如何显示表单.

有谁知道如何做到这一点?或者实施了可以执行此操作的控件?

c# transparency alphablending

2
推荐指数
1
解决办法
2万
查看次数

TWinControl的不透明度?

如何改变基于TWinControl的控件的不透明度?为什么他们没有将这种能力添加到TControl/TWinControl级别(为什么只有TForm)?

delphi graphics vcl alphablending opacity

2
推荐指数
2
解决办法
935
查看次数

向Delphi的TImage添加AlphaBlendValue属性的最简单方法是什么?

如果有可疑的参数值,则会在对话框中显示"警告"图像.用户并不总是会注意到它,所以我想在一秒左右的时间内循环淡入淡出(是的,我可以切换Visible属性,但这看起来有点像我只是切换Visible属性).有没有比将它放在自己的表单上并将其浮动在对话框上(以及更改表单的AlphaBlendValue属性)更简单的方法?

delphi transparency timage alphablending delphi-2006

2
推荐指数
1
解决办法
1237
查看次数

两个重叠透明图像的组合透明度的公式是什么?

如果我想显示一个统一的半透明图像,然后"淡出"此图像,逐渐将其替换为另一个相同的透明度,同时在过渡期间将组合透明度保持在恒定水平,如何确定透明度绘制图像?

通过反复试验 - 将各种alphas的透明图像相互叠加 - 我想出了下图,显示了一个轴上图像A的透明度和另一个轴上图像B的透明度.'isoalpha'线显示alpha的组合,沿着线一直产生相同的alpha.每条线用于不同的alpha级别,左上角完全透明.

你可以看到我正在寻找的公式不是alphaA + alphaB == alphaTarget的直线转换.

我正在寻找的数学公式是什么?

Alpha交叉淡入淡出图

X轴 - 图像B的α(0-255 lr).Y轴 - 图像A的alpha(向下0-255).

graphics alpha imaging alphablending

2
推荐指数
1
解决办法
476
查看次数

从数学角度来说,Alpha 混合是如何逐像素工作的?

看起来不像 RGB1*A1 + RGB2*A2 那么简单......值是如何裁剪的?加权?ETC。

这是一个依赖于上下文的问题吗?是否有不同的算法会产生不同的结果?或者一种标准实现?

我对特定于 OpenGL 的答案特别感兴趣,但来自其他环境的上下文也很有用。

math shader alphablending pixel colors

2
推荐指数
2
解决办法
3791
查看次数

Alphablend功能

是否可以使用alphablend函数使图像的某些部分透明?

我可以创建一个包含RGB(0,0,255)特定区域的图像,当我绘制该图像时,该区域应该是透明的.这可能是AlphaBlend函数.是的,那么如何?

我正在阅读有关alphablend的内容,但我仍然不清楚.我想我们需要在创建图像时指定alphachannel.如果某个像素不存在alphachannel,那么该像素不能透明?

c++ winapi gdi alphablending

2
推荐指数
1
解决办法
3825
查看次数

OpenGL alpha混合问题,背面可见

我试图显示"透明"表面(不是封闭的体积),正面和背面都是可见的(没有剔除).

例如,显示在两侧都应用透明度的圆锥或圆柱体.有一些可见的工件,表面的某些部分似乎没有正确处理alpha值.

似乎问题是当我(opengl)试图将alpha从表面的正面应用到表面的背面时.(当表面的内部/外部都可见时).

void init()
{
    glMatrixMode(GL_PROJECTION);
    gluPerspective( /* field of view in degree */ 40.0,
        /* aspect ratio */ 1.0,
        /* Z near */ 1.0, /* Z far */ 10.0);
    glMatrixMode(GL_MODELVIEW);
    gluLookAt(0.0, 0.0, 5.0,  /* eye is at (0,0,5) */
        0.0, 0.0, 0.0,      /* center is at (0,0,0) */
        0.0, 1.0, 0.);      /* up is in positive Y direction */
    glTranslatef(0.0, 0.6, -1.0);

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
    glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
    glLightfv(GL_LIGHT2, GL_DIFFUSE, …
Run Code Online (Sandbox Code Playgroud)

opengl alphablending windows-vista

1
推荐指数
1
解决办法
1852
查看次数

需要帮助了解Alpha频道

我有一个像素的RGB元组,我们称之为P.

(255,0,0)是P的颜色,alpha通道为1.0.

当alpha通道为0.8时,P的颜色变为(255,51,51).

如何获得影响P颜色的像素颜色?

transparency alpha alphablending image-processing alpha-transparency

1
推荐指数
1
解决办法
1591
查看次数

使用查找表更快地进行Alpha混合?

我创建了一个查找表,允许您使用单字节alpha通道混合两个单字节通道(每通道256色),不使用浮点值(因此没有浮点到int转换).查找表中的每个索引对应于与alpha值相关的信道的256ths的值.

总而言之,为了完全计算3通道RGB混合,每个通道需要对阵列进行两次查找,再添加一个.这是总共6次查找和3次添加.在下面的示例中,我将颜色分成单独的值以便于演示.此示例显示如何通过范围从0到256的alpha值混合三个通道RG和B.

BYTE r1, r2, rDest;
BYTE g1, g2, gDest;
BYTE b1, b2, bDest;

BYTE av; // Alpha value
BYTE rem = 255 - av; // Remaining fraction

rDest = _lookup[r1][rem] + _lookup[r2][av];
gDest = _lookup[g1][rem] + _lookup[g2][av];
bDest = _lookup[b1][rem] + _lookup[b2][av];
Run Code Online (Sandbox Code Playgroud)

它很棒.精确,因为你可以使用256色通道.实际上,您可以使用实际的浮点计算得到相同的精确值.查找表是使用双打开始计算的.查找表太大,不适合这篇文章(65536字节).(如果你想要它的副本,请发送电子邮件至ten.turtle.toes@gmail.com,但不要期待明天的回复,因为我现在要睡觉了.)

所以你怎么看?它值得吗?

c c++ graphics optimization alphablending

1
推荐指数
2
解决办法
2769
查看次数