透明像素-Premultiplied Alpha的秘密

关于PMA(Premultiply Alpha)的理解 Alpha Blending 背景知识: 经典图形理论认为,一个象素可以有三原色构成,即红色,绿色,蓝色,即RGB。对于24位深度的图形系统,RGB各占8个BIT。一个象素占24个BIT。 Alpha通道: Alpha通道是用来处理透明色的一种方法。在每个象素中保存一个Alpha值,用来表示这个象素的透明程度。这样可以实现如游戏中透明的光影效果。比如,我们可以定义一个矩形,然后矩形边缘部分... 阅读详情
Premultiplied Alpha的秘密

我得承认题目有点标题党的意思,自从Flash播放器采用了BitmapData以来,Flash采用一种叫做Premultipled Alpha的技术来存储透明的像素。但是它还是有点...为了避免你觉得我啰里巴索你可以直接去检查示例程序, check out the demo right away 如果没看懂,呵呵......

"Premultiplied" alpha技术意味着不仅像素的Alpha信息存储在通道里,而且已经扩张到红,蓝,绿通道里,在实际应用中这意味着如果你保存着 #fff8000橙色,而将其透明度设置为50%,那么实际设置保存的是#80803f00.这意味着颜色通道中的任意像素值都不会比Alpha通道中的值来的大

这样做的原因是出于性能的考虑,图像处理算法在复合两张图片的时候总是需要将ALPHA通道的信息复合到各个颜色通道,因此如果你需要处理很多的图像复合时候,这样的做法就节省了很多的时间,而不需要对每个像素重新进行复合,正如我们所知道的Flash的日常处理中有很多时候都在处理复合,比如重合两张反锯齿的直线时就会有复合,有了这样的处理之后Flash的速度就很快了。

但是也有一个问题,像素是以32位的整数值存储的,也就是说每个通道有8位或者256种可能的值,另一方面像素的计算通常是以浮点数学的方式进行的,也就是说可能的值要远大的多,如果通常以浮点处理那很好,但是有些情况下你不得不将浮点的值回写到像素信息,也就是说比如43.7回写的时候就会圆整为44或者更糟的43回写到像素值里面

通常情况下这种小的误差不会对应用造成很大的麻烦,但是一旦你开始处理小的像素值,那么错误就会被基类放大,,例如如果你将一个像素的ALPHA值设置为16那么每一个像素都会被乘上一个因子16/256=0.0625,因此灰色像素就会变成128*0.0625=8 暗像素64就会变成4,但是稍微亮一点的像素如67也会变成4,注意没有小数这是圆整后的结果,你会发现颜色种类减少了,从原来的256×256×256减少到8*8*8,严重的问题

如果你将ALPHA值保持设置为8那么不会有太大的问题,如果你增大ALPHA值,那么灾难就出现了,大量的颜色信息由于进度原因会丢失,而且无法修复。

为了解释清楚到底是怎么回事我设置了一个Demo demo that visualizes the amount of information loss来解释。它先将图像的Alpha通道设置为一个选定值,然后再设置回255,你所观察到的现象正好说明了,当Alph

关于spine在cocos2dx使用硬件压缩纹理混合问题总结 问题分析 给engine-x增加了ASTC和ETC2纹理支持,默认情况下Image加载这些纹理视为没有alpha预乘,也就是Image的_hasPremultipliedAlpha保持为初始值false, 引擎核心代码中的类基本都会根据该变量正确设置混合模式即{ backend::BlendFactor::SRC_ALPHA, backend::BlendFactor::ONE_MINUS_SRC_ALPHA},所以渲染没什么问题 然而spine运行库的实现中,强制认为纹理已经alpha预乘,因此在使用E 阅读详情

相关推荐

HALCON基于描述符的模板匹配(未标定)

HALCON基于不标定描述符的模板匹配

king_linj的博客 857

【基础】Premultiplied Alpha Blending/Alpha预乘/透明图片黑边

Premultiplied Alpha Blending 参考1:GPUs prefer premultiplication 参考2:Alpha Blending: To Pre or Not To Pre 参考3:WEBGL, BLENDING, AND WHY YOU’RE PROBABLY DOING IT WRONG 简单来说,Premultiplied Alpha Blending就是将半透明图片的RGB通道值乘以alpha,并相应地将Blend Mode从SrcAlpha OneMinusSrc

weixin_41885426的博客 4245

AI智能体实战:从LangChain到多智能体协作的自动化新范式

在人工智能技术快速发展的今天,大语言模型(LLM)已成为推动自动化变革的核心驱动力。其原理在于通过深度学习海量文本数据,使模型能够理解、生成自然语言并执行推理任务。这一技术进步催生了AI智能体(AI Agent)这一新兴概念,它赋予自动化系统自主决策和动态规划能力,从而突破了传统脚本和RPA工具在固定流程上的局限。从技术价值看,AI智能体框架通过封装LLM调用、工具集成与流程编排,显著降低了构建复杂人机协同应用的开发门槛。在实际应用场景中,智能体尤其擅长处理信息调研、内容创作辅助、数据分析等需要处理非结构化

weixin_33730836的博客 759

iOS之深入解析预乘透明Premultiplied Alpha

一、前言 Premultiplied Alpha 的概念,做过游戏开发的应该都知道,Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alpha,Texture Packer 中也有Premultiplied Alpha 的选项。那么,Premultiplied Alpha 到底是什么呢? 在 Alpha Blending: To Pre or Not To Pre 一文中,详情地阐明了 Premultiplied Alpha 的相关解释

╰つ栺尖篴夢ゞ 2万+

substance designer Premultiplied alpha预乘透明度问题

2D窗口里有个 consider image is alpha premultiplied这个就是用来看是否是透明度预乘模式有些节点比如,只连blend模式的时候里面的颜色会变暗,因为图像被处理成了预乘的模式(比如下图)为什么要有预乘透明度呢先说下基本的alpha叠加公式 最终图像=第一张图的RGB*第一张图的的alpha通道+第二张图的RGB*(1-第一张图的的alpha通道)透明度叠加原理(先...

shenmifangke的专栏 2192

数字媒体技术基础:预乘 Alpha 通道

预乘Alpha 通道Premultiplied Alpha是一种在计算机图形学中常用的技术,用于处理具有透明度的图像或视频内容。它通过将图像的颜色通道(RGB)与 Alpha 通道(透明度通道)相乘,在合成过程中简化计算,提高效率。这种技术在视频编辑、动画制作、游戏开发和实时渲染中广泛应用。◆◆◆颜色通道和 Alpha 通道Alpha 通道与红、绿、蓝(RGB)颜色通道一起工作,定义了图像...

qq_41176800的博客 961

CocosCreator之贴图资源texture性能优化

图像资源(Texture) 图像资源又经常被称作贴图、图片,是游戏中绝大部分图像渲染的数据源。图像资源一般由图像处理软件(比如 Photoshop,Windows 上自带的画图)制作而成并输出成 Cocos Creator 可以使用的文件格式,目前包括JPG和PNG两种。 导入图像资源 使用默认的资源导入方式就可以将图像资源导入到项目中,之后我们就可以在资源管理器中看到如下图所示的图像资源。 图像资源在资源管理器中会以自身图片的缩略图作为图标。在资源管理器中选中图像资源...

码之有道 4033

Qt中Format_ARGB32和Format_ARGB32_Premultiplied的区别

Format_ARGB32表示非预乘alpha模式 Format_ARGB32_Premultiplied表示预乘alpha模式 预乘alpha: 预乘alpha意思是存储数据中的RGB数据已经是与A通道进行运算后的数据 非预乘alpha: 而非预乘alpha指的是存储数据中RGB数据未与A通道进行运算 具体可以看下面这篇文章: Alpha预乘的原理及其应用 - 百度文库 ...

老吕丶的博客 2482

图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied AlphaAlpha预乘)等基础概念详解

本文在笔者花了4天时间查阅了大量资料的基础上,结合自己的理解整理了图像处理的一些常用基础概念,包括图像的灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA概念以及Premultiplied AlphaAlpha预乘等。

老猿Python 1万+

python中alpha是什么意思_图像处理术语解释:什么是PRGBA和Alpha预乘(Premultiplied Alpha )...

Alpha预乘(Premultiplied Alpha)和PRGBA一般来说四通道图像数据保存的都是ARGB或RGBA,其R、G、B值还没有进行任何透明化处理,但这种格式在图像合成时会存在两个问题:由于对有Alpha通道的图片进行合成处理时,先要获取原始图像RGB的值,这个原始图像真正的RGB值必须考虑Alpha通道,因此会进行一次计算:源图像像素颜色 X alpha。如果这种计算都在合成时进行处...

weixin_39876650的博客 7265

图片Premultiplied Alpha到底是干嘛用的

Premultiplied Alpha 这个概念做游戏开发的人都不会不知道。Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alpha,Texture Packer 中也有Premultiplied Alpha 的选项。那么问题来了,Premultiplied Alph...

weixin_33949359的博客 810

【亲测免费】 提升渲染性能的利器:Pre-Multiplied Alpha

提升渲染性能的利器:Pre-Multiplied Alpha 在现代游戏开发和虚拟现实(VR)应用中,渲染性能的优化是至关重要的。为了在移动设备上实现流畅的VR体验,开发者们不断寻找新的技术手段来提升帧率。今天,我们将介绍一个被重新发现的技术——Pre-Multiplied Alpha,它不仅能够解决常见的渲染问题,还能显著提升渲染性能。 项目介绍 Pre-Multiplied Alpha 是一种...

gitblog_00245的博客 1112

Spine正确的导出和Unity导入设置(解决黑边/彩条带问题)

Spine正确的导出和Unity导入设置(解决黑边/彩条带问题)

Z478942073的博客 9276

3.js - premultiplyAlpha(TextureLoader在加载纹理时,是否进行alpha预乘)

3.js - premultiplyAlpha(TextureLoader在加载纹理时,是否进行alpha预乘)

pig_ning的博客 557

什么是premultiplied alpha

像素深度,像素深度是指存储每个像素所用的位数,它也是用来度量图像的分辨率。像素深度决定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。例如,一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那么一个像素共用24位表示,就说像素的深度为24,每个像素可以是16 777 216(2的24次方)种颜色中的一种。在这个意义上,往往把像素深度说成是图像深度。表

Tony_guo5566的专栏 797

强化学习-基于Pytorch的深度强化学习的模块化实现-附项目源码-优质项目实战.zip

强化学习_基于Pytorch的深度强化学习的模块化实现_附项目源码_优质项目实战

上一篇: Flex 应用程序加密2 - SWC AS3 库加密
下一篇: 【求职经历】-JobHuting At IBM 未完成
zinking3
博客等级 码龄19年 262粉丝 215原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值