我正在尝试衡量webkit补丁的可能性,这将使所有渲染的图形都可以渲染到完全透明的背景上. 所需的效果是渲染没有任何背景的Web内容,它似乎应该在桌面上漂浮(或浏览器窗口后面显示的内容). 有人看过一个应用程序吗? (我可以想到一些可以的终端模拟器.)如果有人在Webkit(或可能是壁虎?)内部工作吗?)您认为可以这样做吗? 更新:我已经意识到Mac OSX仪表板小部件使用此精确技术.因此,这必须是可能的. 更新2:我已经在Linux上编译了WebKit,并注意到配置选项包括: --enable-dashboard-support enable Dashboard support default=yes 我越来越近.谁能帮忙? 更新3:我继续在各种相关邮件列表上的帖子中找到对此的参考. webkit-dev/2008- 9月/005019.html webkit-dev/2009- 6月/008182.html 解决方案 已解决!
以下是关于 alphablending 的编程技术问答
代码: gl.enable(gl.DEPTH_TEST); gl.depthFunc(gl.LESS); gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); 问题是在图中绘制图: 如何纠正它? P.S. alpha = 0.9 解决方案 您的视角Znear和Zfar设置了什么?您是否可能将其设置得太近,并且可以将立方体的背面夹住?请参阅下面的示例,设置太近.这看起来不像您的问题,但很难说. 您还在整理多边形吗?当渲染透明的东西时,您通常必须在前后绘制.对于诸如球体,金字塔或立方体之类的凸对象,您可以用淘汰两次绘制两次,首先用gl.cullFace(gl.FRONT)绘制gl.cullFace(gl.FRONT)仅绘制回形三角形,这些三角形距相机更远,然后再用gl.cullFace(gl.BACK)绘制面向三角形,靠近相机的三角形. 还有另一个问题是您是否正确地
是否可以在三个js上互相放置多个纹理. 纹理是(或应该)应用于同一面部的脸部,因此底部纹理(纹理1)没有alpha通道,并且上面的纹理以类似于纹理2的方式在下面的图像示例中以类似于纹理2的方式引导. 可以使用html5帆布作为前步骤来实现这种混合,但是由于纹理位图可能很大,所以我更喜欢跳过帆布混合操作. 我通过创建网格的副本并在每个网格上施加一个纹理,并使其他网格透明并将其移动一点,从而进行了测试,但几乎可以闪烁,但是由于对象不能完全处于相同的位置,所以纹理之间有一些空间,这不是正确的效果.它们似乎应该像在EG中混合. Photoshop(如下图). 解决方案 使用ShaderMaterial,并将两个纹理设置为均匀,然后将它们混合在着色器中. 我进行了此示例: http://abstract-algorithm.com/three_sh/真的应该足够了. 所以,您制作ShaderMaterial: var vertShader = document.
我必须在图片控件上呈现图像,该图像是两个PNG文件的组成,其中顶部图像在某些位置上具有透明的像素. plotter.png 的结果应该 with bar.png 在其顶部重叠时出现(请注意棒上的奇怪的白色轮廓): ,但应该是: 我为其制作的代码很简单,因为 CImage image; if (FAILED(image.Load(L"plotter.png"))) return false; CImage imageBar; if (FAILED(imageBar.Load(L"bar.png"))) return false; imageBar.AlphaBlend(image.GetDC(), CPoint()); image.ReleaseDC(); ((CStatic*)GetDlgItem(IDC_PICTURE))->SetBitmap(imag
我正在开发一个将文本放入背景图像中的应用程序.在孩子的时候,文本块放置在画布控制器上,我将画布渲染为PNG.然后,我使用混合效应将其与背景图像混合. 更新 这篇文章专门讲述使用Lumia Imaging SDK链接效应.不幸的是,发表评论的人之一是具有隧道视野,并坚持认为我必须了解有损形象和无损形象之间的区别.在我的上下文中,这种观点与告诉孩子如何在Microsoft Paint中保存图像一样有用.在其他一些评论中,他甚至傲慢地希望我在应用程序中必须有很多错误,并且有一些精神问题. 我在这里了解Lumia成像,显然我遇到了一个没有SDK经验并坚持炫耀的人.然后投票决定让自己感觉更好. 话虽如此,@Martin Liversage指出这不仅仅是JPEG文物.我尝试使用在jpeg节省时进行的几个链接步骤和选择,实际上这些图像出现了不同的.虽然PNG保存确实提高了质量,但仍然不是我期望的.因此,我在这里问有个人经验的人使用SDK,以了解我可以在代码中做什么以改善结果.
我有一个我想变黑的uiview/calayer.我如何尽可能快地变黑?有什么办法避免混合吗? 我知道以下替代方案 创建一个非opaque calayer并设置背景颜色和不透明度,并将其添加为主层上方的子层 与上述使用Uiview相同(可以慢一点...?) 将视图/图层呈现到uiimage并使用CoreGraphics进行绘画(速度太慢,内容是动态/更改) ) 解决方案 创建一个非opaque calayer并设置背景颜色和不透明度,并将其添加为主层上方的子层 其他解决方案 有人给了我一个提示,让我在监督/超级层面上有一个黑暗的背景,并设置了我想变暗的视图的alpha.这样我就不需要添加额外的图层/视图. 潜在的缺点是,如果GroupView不透明度打开(默认情况下,iOS 7及以上). 其他解决方案 我必须做这样的事情.对于任何对实际代码感到好奇的人: // assuming the view you're trying to darke
我的视图有些透明(alpha = 0.6),具有一些子视图.我希望其中一个子视图(uilabel)以1.0的alpha绘制,因为混合使文本难以阅读,但通过将其添加为主要视图的子视图,它采用了其父级的alpha值.有没有办法覆盖这种行为?我相信我必须从子视图中删除它,但想问一下,看看我是否缺少某些东西. 解决方案 您是正确的.您必须将Uilabel从透明视图中移出,以使其成为非透明的视图. 其他解决方案 Brian是对的. 例如: view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6]; 将在alpha 0.6中制作黑色背景,而其他视图不会受到影响. 其他解决方案 另一种容易起作用的方法是不修改Uiview上的Alpha通道.而是修改Uiview的背景彩色对象上的alpha层. 当然,这取决于您为什么使alpha层透明的原因,但是它对我的要求效果很好.
我有像素的RGB元组,我们会称呼P. (255,0,0)是p的颜色,其alpha通道为1.0. 在0.8处的alpha通道时,P的颜色变为(255,51,51). 如何获得影响P颜色的像素的颜色? 解决方案 让我们从头开始.具有alpha的像素只有在与其他东西混合时才有意义.如果您的上层U带有alpha和一个完全不透明的下层L,则方程为: P = (alpha * U) + ((1.0 - alpha) * L) 重新安排公式,您将获得: L = (P - (alpha * U)) / (1.0 - alpha) 显然,当alpha为1.0时,方程式是没有意义的,因为您要除以零. 将您的数字插入,显示R = 255,G = 255,而B = 255对于Pixel l. 几乎是普遍的,图像中的最低层将是约定的所有白色(255,255,255). 其他解决方案 只查看您提供的数字: (1.0-0.8)*255 ~= 50
我想在Delphi表单上绘制半透明的图像,但由于某种原因它不起作用. 这是原始的png(边框是半透明的): 我将图像加载到TImage对象中: Image1.Transparent := True; Form1.Color := clWhite; Form1.TransparentColor := True; Form1.TransparentColorValue := clWhite; 应用程序: 图像不是半透明的.我正在使用包含alpha通道的BMP图像.我想念什么吗? 解决方案 我找到了一个解决方案,可以让您仅使用Windows API绘制带有Alpha通道的BMP图像: const AC_SRC_OVER = 0; AC_SRC_ALPHA = 1; type BLENDFUNCTION = packed record BlendOp, BlendFlags, SourceConstantAlpha,
我的质地有透明区域的问题.基本上,它是呈现在立方体上的硬币的质地.我无法使角落显得透明,它们只是以白色/灰色出现. 我确保启用G20.GL_Blend,所以不能. 这是我在render()方法中使用的代码(我尝试了不同的组合): Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); Gdx.gl20.glEnable(GL20.GL_BLEND); Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); Gdx.gl20.glEnable(GL20.GL_TEXTURE_2D); Gdx.gl20.glBlendEquation(GL20.GL_BLEND); modelBatch.begin(cam); texture.bind();
我的表格上显示了一个网络摄像头提要,并希望在其顶部绘制.我本来打算使用图片框来执行此操作,我发现picturebox不支持真正的透明度,而只是它所打开的表单的颜色.它也不支持字母,这就是我希望它显示的方式,类似于如何出现表单. 有人知道该怎么做吗?还是实现了可以执行此操作的控件? 解决方案 在大多数情况下,Owenp的回答是使用 transoncontrols 将起作用.但是,由于它是网络摄像头的直接绘制接口,因此实时供稿似乎总是在其他控件的顶部. 为了解决这个问题,我做了一些作弊,并创建了一个在视频提要上打开的次要表单 - 这没有边界,设置为始终处于最高状态并给予透明度 - 我直接将其绘制到此表单上.然后,我只需要以这种次要形式处理一些事件,以将重点放在原始形式上并在使用另一个程序时处理. 其他解决方案 Windows表单中的透明度被打破了.正如您发现的那样,它并不真正支持重叠控件.它只是通过透明零件显示了表格的背景颜色.有了一些Windows API魔术,
是否有一种方法可以将多个抽奖操作结合到2D画布渲染上下文,以使它们的组合结果 都组成了画布的先前内容,而不是每个图纸操作由自己组成? 一个应用程序:我想用箭头绘制一条半透明的线,我想避免在线条和箭头重叠的那些区域增加不透明度. 许多其他渲染模型支持此类功能. SVG具有 pdf noreferrer"> pdf参考第7.3节中的"透明组".在许多图形应用程序中,用户可以构建层,然后将其整体组成. 我想我可以设置第二个看不见的画布,以用作屏幕外图像,将我的内容呈现为此,然后使用 globalAlpha 以所需的半透明性将结果构成主帆布.但是我希望有一些更优雅的解决方案,即使我到目前为止找不到文档中的解决方案. 合并CanvasRenderingContext2D中的多个路径,以填充和中风作为一组显然在牢记了类似的目标.但是,重点似乎有如何在路径上执行布尔操作,这可能是 解决方案 否,目前不使用中间画布是不可能的. 除非 您的所有抽奖操作都可以组合到单个路径中
我正在创建一个非常简单的Win32 C ++应用程序,其仅显示半透明的PNG的唯一目的.窗口不应有任何铬,所有不透明度都应在png本身中控制. 我的问题是,窗口下的内容更改时,窗口不会重新粉刷,因此PNG的透明区域被"卡住",最初启动应用程序时的窗口下方. 这是我设置新窗口的行: hWnd = CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP, 0, height/2 - 20, 40, 102, NULL, NULL, hInstance, 0); 呼叫registerClassex,我为背景设置了此设置: wcex.hbrBackground = (HBRUSH)0; 这是我的wm_paint消息的处理程序: case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); Gdiplus::Graphics graphics(h
我必须问一个非常基本的问题.我刚刚学会了如何应用纹理. 基本上,我有一个场景(飞机)和一个立方体.我将纹理应用于立方体的一个面.我试图将纹理应用于红色的立方体的面孔是红色的,但是我希望纹理颜色覆盖它,但是它们以某种方式将其融合在一起,尽管 我没有启用混合,也不是纹理图像透明 ! 这是我的纹理(.png). 这是渲染: 这是我代码的一些相关部分(我知道我做错了很多事情,例如使用三角条而不是四边形,而不是使用hlsl等 - 我是新手:) 构成部分: //glInit glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glDisable(GL_BLEND); //
我有疤痕纹理,我想通过使用alpha混合物来摆脱背景肤色.但是,我在改变特定纹理的单个像素的不透明度方面存在问题.拥有具有透明背景的纹理的最简单方法是什么?我正在使用C ++和OpenGL. 我正在使用BMP图片格式,我正在尝试将疤痕质地映射到脸上,但是脸上的背景颜色在脸上似乎很难.我还需要通过使用alpha混合来执行此操作.我知道我需要使用混合功能: glenable(gl_blend); glblendfunc(gl_src_alpha,gl_one_minus_src_alpha); 我如何更改每种纹理的透明度? 解决方案 听起来您想从Sprites中删除背景.如果是这种情况,请使用一个名为GIMP的程序,然后模糊选择背景并删除它,然后将其导出并关闭它,但是当它要求在导出期间保存时,请说不. Google GIMP和背景编辑,您将看到所需的信息和工具. glBlendFunc (GL_ONE, GL_ONE); 您可能需要使用混合函数中纹理映射
在libgdx中,我正在尝试创建一个形状的纹理:采用完全可见的矩形纹理并掩盖它以获得形状纹理,如下所示: 在这里,我在矩形上对其进行测试,但是我想在任何形状上使用它.我已经研究了batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_ALPHA); gl20.gl_zero-因为我真的不想从掩模中绘制任何像素 gl20.gl_src_alpha-从原始纹理中,我只想绘画那些可见的像素(=白色). 测试代码的关键部分: batch0.enableBlending(); batch0.begin(); batch0.draw(original, 0, 0); //to see the original batch0.draw(mask, width1, 0); //and the mask batch0.draw(original, 0, height1); //base for the result batch0.s
我正在查看SurfaceFlinger,即在Android中执行组成的代码,并且我很难理解一些OpenGL ES 1.0调用,因为我仅编程了ES 2.0代码. 这里是让我感兴趣的代码: glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glColor4x(0x10000, 0x10000, 0x10000, 0x10000); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 它应该做的是将纹理融合到缓冲区中. 为什么需要glTextEnvx和glColor4x呼叫? glBlendFunc是否足以实现混合? i 知道我的问题很幼稚,但是即使阅读 docs . 解决方案 glTexEnv()设置纹理环境模式. GL_REPLACE告诉渲染器要跳过当前的颜色(例如,来自glColor4()),然后告诉渲染器
我正在尝试混合具有透明区域的纹理: glEnable( GL_TEXTURE_2D ); glBindTexture( GL_TEXTURE_2D, ...); glVertexPointer( 2, GL_FLOAT, 0, ... ); glEnable (GL_BLEND); glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 ); 除非我添加gldisable(gl_depth_test),否则顶部纹理的透明部分覆盖了下面的所有内容(而不是混合).有什么办法可以在不破坏深度的情况下做到这一点?我尝试了各种混合功能,但没有帮助. 解决方案 启用深度测试实际上并不能按深度对几何形状进行排序 - 在通常的GL_LESS情况下,如果原始人与观众不靠近观众,则它比以前绘制的绘制.这使您可以按照所需的任何顺序绘制不透明的几何形状,但仍然获得所需的结果,但是混合
我正在尝试创建一个与此相似的梯度的热图: 此图像显示了三个点,梯度很好地融合在一起. 这是我目前在绘图功能中所做的: public void DrawGradient(int x, int y, Graphics g) { using (var ellipsePath = new GraphicsPath()) { var bounds = new Rectangle(x, y, 100, 100); ellipsePath.AddEllipse(bounds); var brush = new PathGradientBrush(ellipsePath); Color[] colors = { Color.FromArgb(64, 0, 0, 255), Color.FromArgb(140, 0, 255, 0), Color.FromArgb(216,
似乎不像RGB1*A1 + RGB2*A2那样简单...如何剪切值?加权?等. 这是一个与上下文有关的问题吗?是否有不同的算法产生不同的结果?或一个标准实现? 我对特定于OpenGL的答案特别感兴趣,但是其他环境的上下文也很有用. 解决方案 我不知道OpenGL,但是一个像素A通常在另一个像素上绘制: : result.r = background.r * (1 - A) + foreground.r * A result.g = background.g * (1 - A) + foreground.g * A result.b = background.b * (1 - A) + foreground.b * A 重复多个像素的操作. 其他解决方案 如果图像未进行较小的alpha,则上述答案有效.但是,如果您将这种类型的混合物与超级alpha图像一起使用,将会有一个黑色边框. parmultiped alpha: 创建图像时,颜色值