gpt4 book ai didi

actionscript-3 - 具有 LineStyle 描边的图形上的 BitmapData.draw()

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

我使用 Shape.graphics.drawRoundRect() 绘制了一个形状,并应用了 lineStyle。我正在尝试使用 BitmapData.draw() 将该形状捕获为 Bitmap,但我遇到了笔画问题。见下文:

enter image description here

如您所见,在使用 draw()(和 drawWithQuality())时,笔画被剪掉了。该线以对象为中心绘制,因此粗细为 4(如我在示例中使用的那样)在形状区域外有 2 个像素,在形状区域内有 2 个像素。 draw() 捕获了从 (0,0) 到 (BitmapData.width,BitmapData.height) 的所有内容,看起来,所以 (0,0) 左侧和顶部的所有内容都丢失了。我尝试使用 clipRect 选项进行补偿,但具有讽刺意味的是,这只是使剪裁的边框变平。

知道如何捕获剩余数据吗?

最佳答案

作为更通用的解决方案,您可以获得对象在其自身坐标空间中的边界,并使用它来设置 BitmapData 的大小并偏移 draw():

import flash.geom.Matrix;
import flash.geom.Rectangle;

const thickness:int = 4;
const radius:int = 10;
const size:int = 100;

var shape:Shape = new Shape();
shape.graphics.lineStyle( thickness, 0xaaaaaa );
shape.graphics.beginFill( 0xdddddd );
shape.graphics.drawRoundRect( 0, 0, size, size, radius, radius );
shape.graphics.endFill();
addChild( shape );

var bounds:Rectangle = shape.getBounds(shape);
var m:Matrix = new Matrix();
m.translate(-bounds.left, -bounds.top);

var bmp1:Bitmap = new Bitmap();
bmp1.bitmapData = new BitmapData( bounds.width, bounds.height, true, 0 );
bmp1.x = 310;
bmp1.y = 100;
addChild( bmp1 );
bmp1.bitmapData.draw( shape, m );

关于actionscript-3 - 具有 LineStyle 描边的图形上的 BitmapData.draw(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15910741/

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