【问题标题】:AS3 BitmapData CopyPixels with alpha带 alpha 的 AS3 BitmapData CopyPixels
【发布时间】:2012-08-29 15:01:55
【问题描述】:

我正在尝试以 0.5 的透明度将位图的像素复制到 BitmapData,但我似乎在 google 或此处的任何地方都找不到对此的任何引用!

我有我的标准复制像素代码

_bitmapData.copyPixels(_bitmaps.vault[BitmapNames.BITMAPNAME], SCREENRECT, _drawPoint, null, null, true);

我可以看到我传递的第一个空值是标有alphaBitmapData:BitmapData 的 BitmapData,所以我假设它与此有关,但我无法解决!

任何帮助将不胜感激,干杯!

【问题讨论】:

    标签: actionscript-3 rendering bitmapdata


    【解决方案1】:

    this link 之后,你会发现一些关于变量的解释。

    简而言之,当您将最后一个参数(mergeAlpha:Boolean)设置为true时,该函数将在复制像素时考虑第4个参数(alphaBitmap:BitmapData),有效地使用alphaBitmap的alpha来合并复制的像素。因此,您应该将用于第一个参数的位图传递给第四个参数,相应地设置第五个参数 (alphaPoint:Point) 并将最后一个参数设置为 true。

    【讨论】:

    • 因此您只能在创建时定义位图的 alpha。我想在第 1 帧以 0.5 的透明度将位图复制到另一个 BitmapData,然后在第 2 帧,当我重绘整个位图时,我想在 0.4 的 BitmapData 上绘制它,然后是 0.3 .....(作为例如),但从你发布的文章中我可以理解,你不能这样做吗?
    • 您只需将原始位图保存在内存中,然后使用它们在每一帧使用所需的 Alpha 值重新创建您想要的位图。
    • 我存储在内存中,我不明白如何将理论应用到代码中。我现在已经解决了!这样的事情var test:BitmapData = new BitmapData(_drawRect.width, _drawRect.height, true, toARGB(0x000000, (.5 * 255))); _bitmapData.copyPixels(_bitmaps.vault[BitmapNames.LEAPJUMPLINE], _drawRect, _drawPoint, test, null, true); } private function toARGB(rgb:uint, newAlpha:uint):uint{ var argb:uint = 0; argb = (rgb); argb += (newAlpha<<24); return argb; }
    • 谢谢,文档中写道 alphaBitmapData: A secondary alpha BitmapData object source。 这真的不是自我解释
    【解决方案2】:

    我已经接受了 Will Kru 的回答,因为下面的答案(尽管只是基于理论)是用于将方法置于疯狂背后的代码!!

    var alphaBitmap:BitmapData = new BitmapData(width, height, true, toARGB(0x000000, (.5 * 255)));

    _bitmapData.copyPixels(_bitmaps.vault[BitmapNames.BITMAP], _drawRect, _drawPoint, alphaBitmap, null, true);

    toARGB 函数在这里找到alpha + RGB -> ARGB?

    【讨论】:

    • 是的,这也可以。 Copypixels 将从您传递给第一个参数的位图中获取颜色值,并从您传递给第四个参数的位图中获取 alpha 值。在我的回答中,我假设您的 sourcebitmap 将包含 alpha 值,因此您可以将它用于两个参数。
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多