2012-08-29 48 views
1

我想将位图的像素复制到BitmapData的透明度可以说.5,但我似乎无法在谷歌或这里的任何地方找到任何引用!AS3位图数据CopyPixel与阿尔法

我有我的标准拷贝像素代码

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

我可以看到,第一个空值我通过是BitmapData标记alphaBitmapData:BitmapData所以我假定它有东西做,但我不能解决它!

任何帮助将不胜感激,欢呼!

回答

1

我已经接受了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?

+1

是的,这也可以。复制像素将从您传递给第一个参数的位图中获取颜色值,并从您传递给第四个参数的位图中获取alpha值。在我的答案中,我假定你的sourcebitmap将包含alpha值,所以你可以将它用于两个参数。 –

4

正在关注this link你会发现一些关于变量的解释。

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

+0

发现原来你只能在创建定义位图的Alpha。我想将位图复制到位于第1帧的.5透明度处的另一个BitmapData,然后在第2帧处,当我重绘整个位图时,我想将它绘制在.4处的BitmapData上,然后.3 .....(作为例如),但从我可以从您发布的artical中取消,你不能这样做? – rorypicko

+0

您只需将原始位图保留在内存中,然后使用这些位图在每一帧中使用所需的alpha值重新创建所需的位图。 –

+0

我在内存中存储,我不知道如何将理论应用到代码中。我现在已经完成了!像这样的工作 var test:BitmapData = new BitmapData(_drawRect.width,_drawRect.height,true,toARGB(0x000000,(.5 * 255))); \t \t \t \t _bitmapData.copyPixels(_bitmaps.vault [BitmapNames.LEAPJUMPLINE],_drawRect,_drawPoint,test,null,true); (rgb:uint,newAlpha:uint):uint { \t \t var argb:uint = 0; \t \t argb =(rgb); \t \t argb + =(newAlpha << 24); \t \t return argb; }' – rorypicko