问题标签 [alpha-transparency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
17951 浏览

android - 访问 ARGB_8888 Android 位图中的原始数据

我正在尝试使用copyPixelsToBufferandcopyPixelsFromBuffer方法在 Android 上访问 ARGB_8888 格式的位图的原始数据。然而,这些调用的调用似乎总是将 alpha 通道应用于 rgb 通道。我需要 byte[] 或类似的原始数据(通过 JNI;是的,我知道 Android 2.2 中的 bitmap.h,不能使用它)。

这是一个示例:

然后日志显示

我知道 argb 通道的顺序是不同的;没关系。但我不希望将 alpha 通道应用于每个副本(这似乎是在做的事情)。

这是如何copyPixelsToBuffercopyPixelsFromBuffer应该工作的?有什么方法可以获取字节 [] 中的原始数据吗?

为响应以下答案而添加:

buffer.order(ByteOrder.nativeOrder());在确实改变结果之前放入copyPixelsToBuffer,但仍然不是我想要的方式:

似乎遇到了基本相同的问题(每个都应用了 alpha copyPixelsFrom/ToBuffer)。

0 投票
2 回答
38437 浏览

html - 如何创建带有 alpha 通道的 h264 视频以用于 HTML5 Canvas?

我对这个演示很感兴趣:http: //jakearchibald.com/scratch/alphavid/

我在这里也看到了这个问题:

我可以使用 HTML5 视频标签制作具有透明背景的视频吗?

但我似乎无法弄清楚:如何创建带有 alpha 通道的 h264、ogg 和 webm 视频文件?

0 投票
2 回答
548 浏览

php - 如何动态生成具有 alpha 渐变的图像?

我正在寻找一种方法来动态创建一个带有羽化边缘的椭圆(并且能够控制羽化的程度)。理想情况下,这将通过 Javascript 实现,因为预期用途是在可以离线使用的应用程序中,但为简单起见,我同时对 PHP 解决方案感到满意。

我确实尝试过使用 GD 的解决方案,但是在处理 alpha 时我发现它非常有限。主要问题是使用填充椭圆和分层会抵消透明效果,并且仅使用逐渐变小的椭圆绘制边框会导致椭圆没有完美对齐的问题(见下图)。

例子

有没有我可以使用的解决方案来消除这些问题,而不会变得太复杂?我知道我可以逐个像素地创建图像,但这似乎是一种非常复杂的方法,这应该是一项相对容易的任务。

0 投票
1 回答
987 浏览

c# - 打印具有部分透明度的图像而不引入失真

我在打印具有 8 位 Alpha 通道的图像和文本时遇到了一些问题。
看起来大多数打印机驱动程序会错误地渲染 Alpha 通道,添加一些抖动模式而不是混合各个图层。
例如,这个问题末尾的代码会产生类似这样的内容(注意左侧方框中的抖动):Virtual PDF printer - Laser printer
到目前为止,只有 XPS 虚拟打印机可以正常工作。

为了避免这种情况,我一直在做的是在中间位图上打印,但是对于 1200 DPI 的标准 11x8.5'' 页面,仅用于存储该位图就需要大约 400 MB 的 RAM,我现在想知道哪个是打印此类对象的正确方法。
谢谢

0 投票
1 回答
3453 浏览

delphi - Delphi 2006:PNG 到 TImage 的运行时分配失去了 alpha 透明度

Delphi 2006 的 TImage 不太支持 PNG。为了在我的表单上显示具有 alpha 透明度的图像,我必须在运行时加载它们。我可以在设计时加载它们,但它们无法生存,我认为是因为 PNG 没有保存在 DFM 文件中。我确信这在最新的 Delphi 中都是笨拙的,但我目前无法升级。

无论如何,我在运行时加载它们:

PNGImageCollection 组件包含我所有的各种大小的 PNG(这些是在设计时创建和加载的),我将它们分配给 FormCreate 事件中的相应 TImage。

这工作正常,直到我遇到问题,在表格上使用这些图像后,我试图在其他地方重用这些图像。我发现分配 TPicture 的行为已将其设置为空图像作为分配的结果。这发生在例程 TPicture.ForceType 中,AFAICT 检查 FGraphic 的类型,如果它不是所需的类型,它会释放 FGraphic 并创建所请求类型的新实例。

好的。因此,经过一番摸索,我发现也许我真的应该这样做:

这起到了作用,因为分配没有破坏图像,但图像现在显示为不透明的半透明位,即:

使用 Image1.Picture.Bitmap.Assign 分配时的 TImage

代替:

使用 Image1.Picture.Assign 分配时的 TImage

如何让此图像正确显示 alpha 透明位?(和补充问题:Image1.Picture.Bitmap.Assign 是正确的方法吗?)。

这是更详细的代码:

在我遇到“重用”TImage 问题的代码中,顺序是:
在表单创建上:

(PNGIMage 是公司标志,LogoImage1 在主窗体上)。

在打印报告标题上:

第一次调用打印徽标的例程时,它会正常执行,但在调用 PrintBitmapRect 后,LogoImage .Picture 会被清除。下次调用打印头例程时,对 CalcGraphicHeight 的调用将失败,因为图像的宽度和高度为零。

将 Picture.Assign 更改为 Picture.Bitmap.Assign 修复了标题打印例程中的 RTE,但是当我将相同的“修复”移植到从 PNG 分配的其他静态图像(如上面的齿轮)时,我失去了 aplha 通道。

0 投票
3 回答
1891 浏览

delphi - 在半透明的 TBitmap 上绘制不透明的线

我有一个空位图,我有一个接收 TCanvas 的绘图例程。绘图程序是一个更大的库的一部分,因此实际上不受我的控制。

简单地说:如果绘图程序影响像素,我希望像素是不透明的;每个未被触摸的像素都应该保持透明。由于我无法控制绘图例程将使用的颜色,因此我宁愿不必使用该TransparentColor属性。

有没有办法实现这一目标?我可以使用某种设置来指定画布应该影响它绘制到的像素的 alpha 层?


更新:我使用的是 Delphi 2010,下面是我尝试过的代码:

0 投票
2 回答
1928 浏览

c++ - 在 8 位位图中处理 alpha 通道的好方法?- OpenGL - C++

我正在使用 OpenGL 加载位图来纹理 3d 网格。其中一些位图有一些像素的 alpha 通道(透明度),我需要找出最好的方法

  1. 获取每个像素的透明度值

  1. 使用应用的透明度渲染它们

有没有人有一个很好的例子?OpenGL 支持这个吗?

0 投票
1 回答
43305 浏览

c# - 将透明 PNG 转换为具有非黑色背景颜色的 JPG

我在 .Net 中使用 System.Drawing.Image 进行从 png 到 jpeg 的简单转换。我基本上只是使用这两行代码:

它工作正常,除非 png 文件由于 alpha 通道而包含透明度。在这种情况下,转换后的 jpeg 具有黑色背景。有没有办法让背景变白?

0 投票
1 回答
368 浏览

iphone - 更改 UIImageView 顶部和底部的 alpha 值

我正在从相册中挑选一张照片,但是我希望能够使用它执行以下操作:

  1. 将顶部和底部的 alpha 值(假设顶部 20 个像素和底部 20 个像素)更改为 0.5

  2. 然后只复制中间未更改的部分并将其分配给另一个 UIImageView

我有这个代码:

0 投票
3 回答
4934 浏览

flash - 具有从 Photoshop 到 Flash 的透明度的 PNG:如何使 .swf 完全显示 .psd 的功能?

我在 Photoshop 中有两层:1 - 纹理,2 - 与纹理重叠的半透明图像。两者的组合在 Photoshop 中看起来不错。我将它们与 Photoshop 分开导出,将它们保存为 24 位 PNG,透明度和颜色转换为 sRGB。(PS 的工作色彩空间是 sRGB。)

将它们导入闪存的结果让我哭了(见下图,注意十字架周围的区域是什么样的)。:(

我尝试动态加载PNG并直接将它们导入fla(压缩类型:lossles,允许平滑:false)。看起来半透明区域在导出时保存不准确。更让我不解的是为什么动态加载和直接导入的结果不同。

我错过了什么?对这些症状的深入解释将不胜感激。


EDIT1这是我坚持的 psd。在 zip 中,您会发现transparent.psd,它只有两层。我仍然没有运气将它们放入 fla:透明区域变脏。

http://noregret.org/test/transparency.zip (400 kb)


EDIT2一位 Flash 开发人员向我指出“预乘 alpha 问题”。

http://en.wikipedia.org/wiki/Alpha_compositing#Description

我想这一定是我要克服的问题。

据我目前所知,Photoshop 内部使用直接 alpha(在 PNG 导出时预乘白色),而Flash 使用预乘 alpha。但我仍然不明白:是什么产生了透明图像渲染的差异?而且我仍然不知道我需要执行哪些操作才能使 PS 和 Flash 中的东西看起来相同(或者至少我如何指导我们的艺术家准备图像)。

任何人?我正在继续挖掘谷歌的答案。


EDIT3不幸的是,我无法展平图像。这里的这个例子只是大图的一小部分。我有一个相当复杂的界面,在纹理顶部有很多半透明元素。图片看起来很酷(就像它是由皱巴巴的纸板或其他东西制成的)。所以,我需要单独的纹理和半透明布局。在 Flash 中将混合模式添加到顶层确实解决了“重影区域”问题,但它也显着改变了画面,这是不可接受的。


半透明层:

在此处输入图像描述

纹理层:

在此处输入图像描述

结果(Windows 上 PS 和 Flash Player 的屏幕截图):

  • Photoshop(原始):好的
  • Flash(导入到fla):重影区
  • Flash(png加载):光鬼区

在此处输入图像描述