假设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) 我试图将一些文件转换为ProRes.转换的一个相当重要的部分是:
我已经尝试过该-blend
命令,但它没有被识别为命令.
-i source.mp4 -r 30 -vcodec prores_ks -profile:v 0 Output.mov
Run Code Online (Sandbox Code Playgroud)
如何在ffmpeg中混合减少帧?
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
有人可以解释这些模式的含义吗?
我无法弄清楚,如何使用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通道的纹理时,非透明部分周围会出现白色边框(边框似乎是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页面的主体为白色时,会产生效果.不过,我没有解释.
我正在尝试使用类似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()
似乎不适用于此. …
好吧,所以我一直试图让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) 我有一个问题:我需要能够采用两种颜色并从中制作出"虚拟渐变".然后,我需要能够在此行的任何位置找到颜色.我目前的做法是:
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) 我正在尝试使用除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) 我想使用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 ?
blending ×10
alpha ×2
ios ×2
uicolor ×2
android ×1
colors ×1
css ×1
css3 ×1
directx-11 ×1
ffmpeg ×1
frame-rate ×1
frames ×1
gradient ×1
graphics ×1
iphone ×1
javascript ×1
modernizr ×1
opengl-es ×1
porter-duff ×1
pygame ×1
reducing ×1
sprite-kit ×1
transparency ×1
webgl ×1