标签: blending

混合两种透明颜色时的alpha值公式

假设alpha为1表示完全不透明,0表示完全透明.假设我有两个黑色图像,其透明度为50%(alpha = 0.5).

如果它们相互叠加,那么透明度是0.75,对吗?

如果它们的alpha值为0.25,那么结果将是0.5左右,对吗?

如果它们的α值为0.9,那么结果将是0.97左右,对吗?

你怎么能得到这些数字?

换句话说,我正在寻找一个从另外两个alpha值获得结果alpha值的函数.

float alpha = f(float alphaBelow, float alphaAbove)
{
     //TODO implement
}
Run Code Online (Sandbox Code Playgroud)

transparency alpha blending colors

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

如何在ffmpeg中混合减少帧数

我试图将一些文件转换为ProRes.转换的一个相当重要的部分是:

  • 将帧数从60减少到30
  • 将每2帧混合成一个,实现更流畅的运动.(一种简单的运动模糊)

我已经尝试过该-blend命令,但它没有被识别为命令.

-i source.mp4 -r 30 -vcodec prores_ks -profile:v 0 Output.mov
Run Code Online (Sandbox Code Playgroud)

如何在ffmpeg中混合减少帧?

blending ffmpeg frame-rate frames reducing

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

pygame中的混合模式是什么意思?

Surface.blit在1.8中有一个新参数:blend.定义了以下值:

  • BLEND_ADD
  • BLEND_SUB
  • BLEND_MULT
  • BLEND_MIN
  • BLEND_MAX
  • BLEND_RGBA_ADD
  • BLEND_RGBA_SUB
  • BLEND_RGBA_MULT
  • BLEND_RGBA_MIN
  • BLEND_RGBA_MAX
  • BLEND_RGB_ADD
  • BLEND_RGB_SUB
  • BLEND_RGB_MULT
  • BLEND_RGB_MIN
  • BLEND_RGB_MAX

有人可以解释这些模式的含义吗?

pygame blending alphablending

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

GLSL中的纹理和颜色一起?

我无法弄清楚,如何使用OpenGL ES 2.0类似于OpenGL ES 1.1的结果.我想实际使用Sampler2D(将我的纹理与Alpha通道混合到Framebuffer)并设置Color.纹理应该用颜色绘制 - 就像在OpenGL ES 1.1中我的FragmentShader看起来像这样:

varying lowp vec4 colorVarying;
varying mediump vec2 texcoordVarying;
uniform sampler2D texture;

void main(){
    gl_FragColor = texture2D(texture, texcoordVarying) + colorVarying;
}
Run Code Online (Sandbox Code Playgroud)

但是"+ colorVarying"部分用黑色破坏了我的alpha通道(因为我还添加了colorVarying,如果AlphaValue为0)并且产生了奇怪的渐变效果......纹理和颜色通道如何在固定功能管道中组合?我对glColor4f的替换是:

void gl2Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a){
    const GLfloat pointer[] = {r, g, b, a};
    glVertexAttribPointer(ATTRIB_COLOR, 2, GL_FLOAT, 0, 0, pointer);
    glEnableVertexAttribArray(ATTRIB_COLOR);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 如果这是某种相关的......

对于颜色1.0,0.0,1.0,1.0这里是我现在得到的: 现在

我想得到:

我想看到什么

一些想法来实现这一目标?任何帮助,将不胜感激.

alpha blending fragment-shader opengl-es-2.0

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

webgl:使用透明度(alpha)时的白色边框

渲染具有Alpha通道的纹理时,非透明部分周围会出现白色边框(边框似乎是alpha> 0且<1的像素):

在此输入图像描述

原始纹理在Illustrator中创建并导出为png.这里是:

在此输入图像描述

(好吧,似乎stackoverflow改变了图像,调整了不完全不透明/透明的像素,所以这里是一个链接)

它可能是混合,虽然我不知道设置有什么问题:

gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

[更新]

这是一个渲染版本,其中我在纹理的左侧部分添加了一个alpha渐变(因此它从0不透明度变为1直到一半)

在此输入图像描述

此纹理是此位置渲染的唯一纹理.它似乎在a = 0.5附近最白.真的很奇怪.背景只是一个清除的颜色:

gl.clearColor(0.603, 0.76, 0.804, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// render objects here
Run Code Online (Sandbox Code Playgroud)

深度函数看起来像:

gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.LEQUAL);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?非常感谢.

[更新2]

回答我自己的问题:当画布的背景颜色或html页面的主体为白色时,会产生效果.不过,我没有解释.

graphics blending opengl-es webgl

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

将两个图像与乘法和%不透明度混合在一起

我正在尝试使用类似Multiply的混合模式将两个图像与Android混合在一起.

// Prepare -------------------------------

// Create source images
Bitmap img1 = ...
Bitmap img2 = ...

// Create result image
Bitmap result = ...
Canvas canvas = new Canvas();
canvas.setBitmap(result);

// Get proper display reference
BitmapDrawable drawable = new BitmapDrawable(getResources(), result);
ImageView imageView = (ImageView)findViewById(R.id.imageBlend1);
imageView.setImageDrawable(drawable);


// Apply -------------------------------

// Draw base
canvas.drawBitmap(img1, 0, 0, null);

// Draw overlay
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY));
paint.setShader(new BitmapShader(img2, TileMode.CLAMP, TileMode.CLAMP));

canvas.drawRect(0, 0, img2.getWidth(), img2.getHeight(), paint);
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是我无法控制所做的乘法"量" - 它始终是一个完全的乘法传递.理想情况下,0%乘法与基本图像(img1)相同而没有任何变化,但100%乘法将是我得到的上述代码的结果.

paint.setAlpha() 似乎不适用于此. …

android blending porter-duff

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

DirectX 11 Alpha混合不起作用

好吧,所以我一直试图让Alpha Blending在我的3D应用程序中运行,但它不希望发生.我在渲染循环的最后绘制了具有正交投影的2D图像(深度测试保持启用)并且图像纹理具有透明部分但是它们呈现黑色.这是我的混合代码:

D3D11_BLEND_DESC blendStateDesc; 
ZeroMemory(&blendStateDesc, sizeof(D3D11_BLEND_DESC));
blendStateDesc.AlphaToCoverageEnable = FALSE;
blendStateDesc.IndependentBlendEnable = FALSE;        
blendStateDesc.RenderTarget[0].BlendEnable = TRUE;
blendStateDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
blendStateDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
blendStateDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
blendStateDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
blendStateDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_DEST_ALPHA;
blendStateDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
blendStateDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;

if (FAILED(device->CreateBlendState(&blendStateDesc, &blendState))) {
printf("Failed To Create Blend State\n");
}
deviceContext->OMSetBlendState(blendState, NULL, 0xFFFFFF);
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,这里是纹理描述:

D3D11_TEXTURE2D_DESC texDesc;
texDesc.Width = TextureWidth;
texDesc.Height = textureHeight;
texDesc.MipLevels = 1;
texDesc.ArraySize = 1;
texDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
texDesc.SampleDesc.Count = 1;
texDesc.SampleDesc.Quality = 0;
texDesc.Usage = D3D11_USAGE_IMMUTABLE;
texDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
texDesc.CPUAccessFlags …
Run Code Online (Sandbox Code Playgroud)

blending alphablending directx-11

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

iOS在两种颜色之间的点处查找颜色

我有一个问题:我需要能够采用两种颜色并从中制作出"虚拟渐变".然后,我需要能够在此行的任何位置找到颜色.我目前的做法是:

if (fahrenheit < kBottomThreshold)
{
    return [UIColor colorWithRed:kBottomR/255.0f green:kBottomG/255.0f blue:kBottomB/255.0f alpha:1];
}
if (fahrenheit > kTopThreshold)
{
    return [UIColor colorWithRed:kTopR/255.0f green:kTopG/255.0f blue:kTopB/255.0f alpha:1];
}

double rDiff = kTopR - kBottomR;
double gDiff = kTopG - kBottomG;
double bDiff = kTopB - kBottomB;

double tempDiff = kTopThreshold - kBottomThreshold;

double rValue;
double gValue;
double bValue;

rValue = kBottomR + ((rDiff/tempDiff) * fahrenheit);
gValue = kBottomG + ((gDiff/tempDiff) * fahrenheit);
bValue = kBottomB + ((bDiff/tempDiff) * fahrenheit);

return [UIColor colorWithRed:rValue/255.0f green:gValue/255.0f …
Run Code Online (Sandbox Code Playgroud)

gradient blending linear-gradients uicolor ios

9
推荐指数
4
解决办法
3091
查看次数

iOS Sprite Kit为什么我不能用白色重复colorizeWithColor?

我正在尝试使用除scale之外的方法来选择sprite节点的方法.我最喜欢的一种方法是用白色着色,这可以明显地突出显示节点.

但是,我似乎无法多次使用白色行为复制着色.为什么我colorizeWithColor不能多次使用白色?

除了使用的颜色外,这两个方法调用是相同的.如果我使用红色,灰色等,节点会通过闪烁来响应每次触摸.但是,如果我使用白色,它只会使用一次,然后再也不会响应触摸.

[self runAction:[SKAction colorizeWithColor:[SKColor lightGrayColor] colorBlendFactor:0.8 duration:0.6] completion:^{

        [self runAction:[SKAction colorizeWithColorBlendFactor:0.0 duration:0.4]];
    }];

    [self runAction:[SKAction colorizeWithColor:[UIColor colorWithWhite:0.99 alpha:1.0] colorBlendFactor:0.8 duration:0.6] completion:^{

        [self runAction:[SKAction colorizeWithColorBlendFactor:0.0 duration:0.4]];
    }];
Run Code Online (Sandbox Code Playgroud)

iphone blending uicolor ios sprite-kit

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

测试CSS"混合混合模式"

我想使用CSS的属性:

mix-blend-mode: soft-light;
Run Code Online (Sandbox Code Playgroud)

And I will test by Modernizr for fallback bla bla...

Tested :

Modernizr.mixblendmode //undefined
Modernizr.testProp('mixblendmode'); //false
Modernizr.addTest('mixblendmode'); // no-mixblendmode
Run Code Online (Sandbox Code Playgroud)

What am I missing ?

Tested on Firefox, CSS its work, but how to test with Modernizr ?

javascript css blending css3 modernizr

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