gpt4 book ai didi

actionscript-3 - 使用 AS3 检查 PNG 图像是否包含(半)透明像素

转载 作者:行者123 更新时间:2023-12-04 04:33:21 24 4
gpt4 key购买 nike

我想使用 AS3 检查一个(32 位 ARGB)PNG 图像以查看它是否包含任何(半)透明像素(返回 truefalse) .最快的方法是什么?

最佳答案

很久以前,我一直在寻找同样的东西,我尝试使用循环来检查每个像素。但这花费了很多时间并且消耗了大量的 CPU。幸运的是我们有 BitmapData.compare()方法,如果比较的 BitmapData 对象存在任何差异,则输出 Bitmapdata。

还有 BitmapData.transparent属性,它实际上直接给你一个 bool 值的答案。但是我自己从来没有直接在加载的图像上使用它。

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;

var ldr:Loader = new Loader();
var req:URLRequest = new URLRequest('someImage.png');
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,imgLoaded);
ldr.load(req);

function imgLoaded(e:Event):void {
var l:Loader = e.target.loader,
bmp:Bitmap = l.content as Bitmap,
file:String = l.contentLoaderInfo.url.match(/[^\/\\]+$/)[0];
trace(bmp.bitmapData.transparent);
// I think this default property should do it but
// in case it does not, here's another approach:
var trans:Boolean = isTransparent(bmp.bitmapData);
trace(file,'is'+(trans ? '' : ' not'),'transparent');
}

function isTransparent(bmpD:BitmapData):Boolean {
var dummy:BitmapData = new BitmapData(bmpD.width,bmpD.height,false,0xFF6600);
// create a BitmapData with the size of the source BitmapData
// painted in a color (I picked orange)
dummy.copyPixels(bmpD,dummy.rect,new Point());
// copy pixels of the original image onto this orange BitmapData
var diffBmpD:BitmapData = bmpD.compare(dummy) as BitmapData;
// this will return null if both BitmapData objects are identical
// or a BitmapData otherwise
return diffBmpD != null;
}

关于actionscript-3 - 使用 AS3 检查 PNG 图像是否包含(半)透明像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13568717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com