标签: alphablending

pylab中的变量alpha混合

如何在pylab中控制2D图像的透明度?我想给出两组值(X,Y,Z,T),其中X,Y是位置数组,Z是颜色值,T是函数的透明度,imshow但似乎函数只将alpha作为标量.作为一个具体的例子,考虑下面的代码试图显示两个高斯.值越接近零,我就越喜欢这个情节.

from pylab import *

side = linspace(-1,1,100)
X,Y  = meshgrid(side,side)

extent = (-1,1,-1,1)

Z1  = exp(-((X+.5)**2+Y**2))
Z2  = exp(-((X-.5)**2+(Y+.2)**2))

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent)
imshow(Z2, cmap=cm.hsv, alpha=.6, extent=extent)
show()
Run Code Online (Sandbox Code Playgroud)

注意:我不是在寻找Z1 + Z2的图(这将是微不足道的),而是用于指定图像中的alpha混合的一般方法.

python alphablending matplotlib

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

iPhone opengl es alpha-blending.我的边缘有黑色

我正在开发iPhone游戏.我有下面的源图像将其绘制到背景.源图像具有alpha 0x00和边缘周围的渐变,背景的alpha为0xff.当我将源图像绘制到背景时,我会看到黑色,就像您可以看到结果图像一样.我正在使用OpenGL ES glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)方法.我已经改变了所有可能的论点,但每次都没有被移动.

为什么我在源图像的边缘有黑色?问题是什么?iPhone中的每个游戏都不会使用渐变吗?

我是否需要制作渐变的源图像?

有谁知道解决方案?

来源图片:

替代文字

结果图片:

替代文字

iphone alphablending opengl-es

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

OpenCV(Emgu.CV) - 用alpha合成图像

我正在使用Emgu.CV来执行一些基本的图像处理和合成.我的图片被加载为Image<Bgra,Byte>.

问题#1:当我使用该Image<,>.Add()方法时,无论alpha值如何,图像总是混合在一起.相反,我希望它们在另一个上面合成,并使用包含的alpha通道来确定图像应该如何混合.因此,如果我调用image1.Add(image2)image2中的任何完全不透明的像素将完全覆盖来自image1的像素,而半透明像素将基于alpha值进行混合.

这就是我想用视觉形式做的事情.有一个城市形象,一些"透明洞"被切掉,后面有一只青蛙.它应该是这样的:

在此输入图像描述

这就是openCV产生的.

这就是OpenCV(Emgu.CV)在我称之为

如何使用OpenCV获得此效果?它会像打电话一样快Add()吗?

问题2:有没有办法就地执行这个组合,而不是每次调用都创建一个新的图像Add()?(例如image1.AddImageInPlace(image2)修改字节 image1?)

注意:在Emgu.CV中寻找答案,我正在使用它,因为它处理透视变形的程度.

opencv alphablending image-processing emgucv

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

QML视频alpha混合/将视频渲染为Qt快速场景图

我正在尝试使用RGBA中的视频在QML中获得alpha混合效果.

现在的问题是QtMultimedia提供的视频项实际上在QtQuick场景中打开了一个重叠窗口,所以我认为不可能将其他QML元素与视频元素进行alpha混合(我当然希望我错了,但是我找不到解决方案).

另一种方法是在updatePaintNode方法中自己在一个继承自QQuickItem的类中呈现视频.

  1. 以前有人见过这样的事吗?如果QtMultimedia背后的人无法实现它,它甚至可能吗?

  2. 我可以更改MediaPlayer元素的背景,可能是透明的还是只是QML中的颜色?

到目前为止,我一直在考虑QAbstractVideoSurface和QVideoFrame但我不知道如何将其渲染到QSG上,甚至不知道GeometryNode应该如何查找视频.

最好的解决方案是在其他QML元素中进行alpha混合,例如:

Rectangle {
  width: 1024
  height: 768
  color: "yellow"

  focus: true

  Video {
    id: video
    anchors.fill: parent
    source: "alpha-video.mov"

    autoPlay: true
  }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

qt alphablending qml qtquick2

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

你可以在其子视图之一上覆盖父UIView的alpha值吗?

我有一个透明的视图(alpha = 0.6)有一些子视图.我想要使​​用1.0的alpha绘制其中一个子视图(UILabel),因为混合使文本难以阅读,但通过将其添加为主视图的子视图,它已采用其父级的alpha值.有没有办法覆盖这种行为?我相信我必须从子视图中删除它,但想问一下,看看我是否遗漏了一些东西.

cocoa-touch alphablending uiview

6
推荐指数
3
解决办法
4338
查看次数

OpenGL ES(IPhone)alpha混合看起来很奇怪

我正在为Opengl ES中的iPhone编写游戏,我遇到了alpha混合的问题:

我正在使用glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA)alpha混合并尝试用几个"层"组成一个场景,所以我可以单独移动它们而不是静态图像.我在photoshop中创建了一个预览,然后尝试在iphone中获得相同的结果,但是当我将纹理与半透明区域混合时会显示黑色光环.

我附上了一张图片.左边是iphone的屏幕截图,右边是我在photoshop中制作作品时的样子.图像由渐变和带有羽化边缘的沙子图像组成.

这是预期的行为吗?有什么办法可以避开黑暗的边界吗?

谢谢.

编辑:我正在上传包含沙子的png部分.完整的png是512x512,也有其他图像.

我正在使用以下代码加载图像:

NSString *path = [NSString stringWithUTF8String:filePath];
NSData *texData = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:texData];
if (image == nil) NSLog(@"ERROR LOADING TEXTURE IMAGE");

GLuint width = CGImageGetWidth(image.CGImage);
GLuint height = CGImageGetHeight(image.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *imageData = malloc( height * width * 4 );
CGContextRef context = CGBitmapContextCreate( imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
CGColorSpaceRelease( colorSpace );
CGContextClearRect( context, …
Run Code Online (Sandbox Code Playgroud)

iphone alphablending opengl-es

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

在WPF中更改Alpha混合模式?

System.Drawing.Graphics类有一个属性CompositionMode,有两个选项:SourceOver(基于alpha组件,混合用已经存在的背景绘制的任何东西)或SourceCopy,它只是用正在绘制的内容覆盖背景.

WPF中是否存在类似的内容?

在WPF中,当我在另一个上面绘制PolyLine时,新的PolyLine总是与背景混合.我认为这与使用的容器无关.我正在使用Canvas但无法在任何地方找到混合模式属性.我想要做的是上面提到的SourceCopy组合模式.即新的PolyLine应该简单地覆盖Canvas上已有的内容.

有没有一种简单的方法可以做到这一点,没有使用像素着色器(据我所知 - 它无论如何都无法工作,因为我无法访问Canvas后台缓冲区).

我没有坚持使用Canvas,并且很乐意使用任何支持覆盖模式的容器.

我目前有一个基于WriteableBitmap的解决方案,我获取了System.Drawing.Graphics上下文,然后操作CompositionMode.它的工作原理,但由于我的窗口全屏,解决方案会对性能产生严重影响.

澄清和示例:WPF窗口是完全透明的,Canvas(背景颜色(0,0,0,0))也是如此.现在我使用Color.FromArgb(128,128,0,0)绘制PolyLine.我现在有一条半透明的红色折线.接下来,我使用Color.FromArgb(0,0,0,0)绘制相同的PolyLine.由于发生了α混合,结果与之前相同.然而,我想要的是用第二条折线擦除红色折线(这正是Graphics类中的SourceCopy模式所做的.

wpf alphablending

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

使用混合模式重新创建HSV颜色

我正在开发一个应用程序来创建图像,其色调,饱和度和值根据不同的参数而变化.出于性能原因,分别渲染色调,饱和度和值组件,然后使用Photoshop样式混合模式(乘法,叠加,屏幕,色调等)将它们合成在一起是有意义的.

我已经知道如何为RGB图像执行此操作:将每个通道分成自己的红色,绿色或蓝色图像,其值从透明到该通道的颜色.将它们一起层叠在黑色上并将它们的混合模式设置为屏幕,嘿,你有你的彩色图像:

由组件制成的RGB图像

如何使用HSV值定义的图像执行此操作?我的应用程序经常更改其中一个通道而不更改其他两个通道,如果我可以在GPU上合成现有图像而不是每次更改时都呈现全新图像,它将加快我的渲染速度.

这是一个例子: 使用单独的H,S和V通道生成的图像

在此示例中,色调在圆周周围从0º到360º变化,饱和度从中心到边缘从0%到100%变化,亮度(V)在圆周周围从0%变化到100%.这是我的应用程序创建的典型图像.是否有一些常见的混合模式可以用来分别创建这些通道并以数学上完美的方式组合它们?

graphics compositing alphablending colors color-blending

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

覆盖两个或多个位图以在Picturebox中显示(C#)

在我的C#程序中,我有一个Picturebox,我想在其中显示视频流(连续帧).我收到原始数据,然后我转换为Bitmap或Image.我可以一次显示一个图像而没有问题(重现视频流).

现在我的问题是我想合并2个或更多位图(如图层)具有相同的大小和alpha值(ARGB)并在图片框上显示它.

我在SO上阅读了很多网站和帖子,但很多都使用Graphics类,我只是无法在我的应用程序上绘制它(很可能是因为我是C#的新手!并且已经有我的程序设置,所以我不想改变结构).

我需要(知道):

  1. 如何使用alpha值覆盖两个或多个位图;
  2. 请不要像素操作,不能承受性能成本.

非常感谢你提前!

注意:我认为这个问题不应该被标记(或关闭)为重复,因为我在SO中找到的所有内容都是通过像素操作或通过Graphics类完成的.(但我可能错了!)

编辑:可能的解决方法(不是问题的解决方案)
PictureBox问题中,第4个答案(来自用户comecme)告诉我有2个picturebox,一个在另一个之上.我必须做的唯一(额外)事情是使它与这种方法一起工作:

private void Form1_Load(object sender, EventArgs e)
{
    pictureBox2.Parent = pictureBox1;
}
Run Code Online (Sandbox Code Playgroud)

哪个pictureBox2将是顶部的那个.

我不会认为这是这个问题的答案,因为我认为这是一种解决方法(特别是因为有超过10个图片盒似乎不太理想!哈哈).这就是为什么我会打开这个问题等待我的问题的真正答案.

编辑:已解决!检查我的答案.

c# alpha alphablending bitmap picturebox

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

具有多个渲染迭代的Alpha混合问题到同一纹理(OpenGL)

场景

我正在创建一个帧缓冲区对象并将纹理绑定到颜色附件0.我没有使用深度缓冲区.创建它之后,我解开它.

在某个时间点之后,帧缓冲区被绑定,向其呈现三角形条带(某些部分部分透明),然后再次解除绑定.使用不同的三角形条重复多次.

最终,绘制到主帧缓冲区的是纹理四边形,其纹理附加到我创建的帧缓冲区对象上.

问题

我发现绘制到纹理中的三角形条带的部分透明部分与其他三角形条带重叠没有正确混合.它们似乎与白色混合,而不是纹理中已经存在的颜色.即使我用纯绿色填充纹理(例如),在混合时拾取的颜色仍然是白色.

这里是我用来完成所有这些的代码的几个片段:

初始化

glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGenFramebuffers(1, &framebuffer_id);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_id);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

渲染到纹理(迭代)

glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_id);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// On the first render iteration, do_clear is true
if (do_clear)
{
    glClearColor(r, g, b, a);
    glClear(GL_COLOR_BUFFER_BIT);
}

// ... render the current triangle strip ...

glBindFramebuffer(GL_FRAMEBUFFER, …
Run Code Online (Sandbox Code Playgroud)

opengl rendering alphablending opengl-es framebuffer

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