我有一个包含4层的组件:(按升序排列)bgImage:Sprite,dropZone:Sprite,dropMask:Sprite和line:Sprite.bgImage为0,0,其他对象放置在各种正坐标处.dropMask正在屏蔽dropZone.
在位图捕获点我想只从dropZone和dropMask层绘制,所以我在尝试这个:
removeChild(bgImage);
removeChild(line);
var bmd:BitmapData = new BitmapData(dropMask.width,dropMask.height,true,0);
bmd.draw(this,null,null,null,dropMask.getBounds(this));
Run Code Online (Sandbox Code Playgroud)
尽管dropMask位于50,60,但捕获总是从0,0开始.我也试过获得边界矩形并强制x,y,但它没有区别.我在这里做错了什么,我应该忘记clipRect并使用矩阵代替吗?
这有效:
var a:BitmapData = new BitmapData(640,480);
var b:Bitmap = new Bitmap(a);
a.draw(movieClip);
Run Code Online (Sandbox Code Playgroud)
这不起作用:
movieClip.mask = movieClipMask;
var a:BitmapData = new BitmapData(640,480);
var b:Bitmap = new Bitmap(a);
a.draw(movieClip);
Run Code Online (Sandbox Code Playgroud)
如何只将MovieClip的可见部分(使用遮罩)绘制到我的位图中?
我正在做一个简单的测试.我想将BitmapData写入ByteArray.我正在尝试使用writeObject()和readObject().读取对象似乎无法理解BitmapData.
var byteArray : ByteArray = new ByteArray();
var _cache : BitmapData = new BitmapData( 640, 480, true, 0x000000 );
var _blank : BitmapData = new BitmapData( 640, 480, true, 0x000000 );
byteArray.writeObject( _blank );
byteArray.position = 0;
_cache = byteArray.readObject() as BitmapData;
trace( _cache ); // Traces null
Run Code Online (Sandbox Code Playgroud)
任何人都可以为我清除这个吗?我无法理解readObject()出了什么问题;
我知道我可以这样做getPixels()和setPixels(),但是我想在这里将对象视为一个对象.
有没有办法将位图数据编码为PNG,以便与FileReference.Save()AS3中的方法一起使用?我想我需要一个编码器库.
我在哪里可以获得将BitpmapData编码为PNG的库?
我有一个填充的 Shape,和一个与Shape的边界框宽度和高度相同的BitmapData.
我需要从BitmapData中剪切Shape(基本上将BitmapData绘制到形状上......)[如此:http://imgur.com/uwE5F.png ]
我使用相当hackish方法:
public static function cutPoly(img:BitmapData, s:Shape, bounds:Bounds):BitmapData {
var temp:BitmapData = new BitmapData(bounds.width, bounds.height, true);
Main.inst.stageQuality("low"); //hack to kill anti-aliasing
temp.draw(s,new Matrix());
Main.inst.stageQuality("high"); // end hack
//0xFF00FF00 is the color of the shape
makeColTrans(temp,0xFF00FF00); //makes the color transparent :P
//return temp;
img.draw(temp);
//img.draw(temp);
temp.dispose();
makeColTrans(img, 0xFFFFFFFF);
return img;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法......一个不仅仅是一个黑客.
我们有一个用 C++ 6 编写的应用程序,可以填充交通地图上的空白多边形以显示当前的交通状况。绿色表示良好,黄色表示拥挤,等等。
“壳图”是使用未填充任何内容的矩形和多边形的道路位图。从道路传感器(导线感应器环路)收集数据,并根据环路检测器数据填充多边形。
当地图发生变化时,必须有人在绘图中手动放大位图,并获取每个新形状内部周围的坐标,其中将填充拥塞颜色。构成地图骨架的多边形均以海军蓝色绘制,在白色背景上。
我做了一个应用程序。当用户单击多边形白色部分内的任意位置时,将向用户显示内部周界的点,并显示已绘制的内部许可者的放大缩略图。
在.Net 中,周界被完美地绘制。
在 C++ 6 应用程序中,一些多边形指向我的应用程序。收集无法正确显示。
我查看了 msPaint,发现 .Net 绘制点的方式与 MS Paint 不同。
这是一个简单的例子。代码来自一种表单,带有一个按钮和一个标签。在位图上绘制一条线,将位图“放大”以便您可以看到它,并显示在标签上。
如果您在 Paint 中使用相同的两个点绘制一条线,则绘制的线段与您在 MS Paint 中绘制的线段不同。
private void button1_Click(object sender, EventArgs e)
{
Bitmap bm = new Bitmap(16, 16);
Graphics g = Graphics.FromImage(bm);
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed;
//g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.None;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Default;
Point pt = new Point(1, 3);
Point pt2 = new Point(5, 1);
// If you reverse the points, the same line …Run Code Online (Sandbox Code Playgroud) 这是我用来使用BitmapData模糊图像的代码.在Slider_changeHandler(event:Event):void事件上调用该函数,并将滑块的值作为blurvalue传递给函数.
问题是功能有效,但似乎是积极的(如果这是正确的单词!),也就是说,假设我将其滑动到最大值,然后尝试通过向前滑动模糊来减少模糊,模糊仍然不断增加.如何让它工作,所以当我将它向上滑动模糊增加,当我向后滑动模糊减少,当滑块为0时,不应用模糊.
var blur:BlurFilter = new BlurFilter();
blur.blurX = blurvalue;
blur.blurY = blurvalue;
blur.quality = BitmapFilterQuality.MEDIUM;
bitmapdata.applyFilter(bitmapdata,new
Rectangle(0,0,bitmapdata.width,bitmapdata.height),new Point(0,0),
blur);
return bitmapdata;
Run Code Online (Sandbox Code Playgroud) 我正在尝试将PNG绘制到透明的BitmapData上.
我像这样创建我的BitmapData(使用ARGB作为颜色):
new BitmapData(width, height, true, 0x00000000);
Run Code Online (Sandbox Code Playgroud)
并使用相同的ARGB值清除它:
bitmapData.fillRect(bitmapData.rect, 0x00000000);
Run Code Online (Sandbox Code Playgroud)
当我使用copyPixels()在已清理的BitmapData上绘制图形时,我得到以下结果:

如果我不使用ARGB作为BitmapData颜色,它可以正常工作:

但我必须指定一个实心的fillColor,这意味着我无法渲染Bitmap背后的内容.
如何使我的BitmapData透明,但不会出现上述情况?
Doc说:
从AIR 3和Flash播放器11开始,已删除BitmapData对象的大小限制.现在,位图的最大大小取决于操作系统.
但是,为什么我不能拥有120,000 x 120,000 px BitmapData对象?我在OS X Lion上使用64位内核.
现在120,000 ^ 2将给我需要占用的14,400,000,000个像素,这只需要34位来存储该int.但显然我可以有64位整数,不是吗?我错过了什么吗?它的意思是"依赖于操作系统"?怎么样?
我用来copyPixels将较大位图的一部分复制到较小的位图以用于单个影片剪辑。然而,在位图边缘周围仍然存在一些额外的空白区域和角点。如何将位图中的白色设置为透明,这样我就不会看到这些难看的边缘?
bitmapdata ×10
flash ×4
bitmap ×3
actionscript ×1
apache-flex ×1
argb ×1
bytearray ×1
c# ×1
copy ×1
encoding ×1
int ×1
movieclip ×1
png ×1
rendering ×1