포함되어 있습니다.가져 오기의 BitmapData 내가이 기능이 투명 영역, 효과 영역
대상 개체에서 비트 맵을 가져올 수 있지만 이미지의 모든 영역을 가져 오지 못하는 것처럼 보입니다.
대상 개체의 너비와 높이를 지정하면 디자인의 대상 개체가 Glow Effect로 적용되므로 내 질문에 displayObject에서 bitmapdata의 모든 뷰를 얻을 수 있습니까?
포함되어 있습니다.가져 오기의 BitmapData 내가이 기능이 투명 영역, 효과 영역
대상 개체에서 비트 맵을 가져올 수 있지만 이미지의 모든 영역을 가져 오지 못하는 것처럼 보입니다.
대상 개체의 너비와 높이를 지정하면 디자인의 대상 개체가 Glow Effect로 적용되므로 내 질문에 displayObject에서 bitmapdata의 모든 뷰를 얻을 수 있습니까?
BitmapData.draw()
은 주어진 개체의 스냅 샷을 사용하여 스테이지에 적용된 모든 변환과 필터를 제거합니다. 결과 이미지는 동영상 라이브러리에있는 개체를 보여줍니다.
변환 및/또는 필터로 표시 객체를 그리는 데는 두 가지 기본 옵션이 있습니다.
BitmapData.draw()
에 적용 할 수 있습니다. 드로잉 후에 BitmapData.applyFilter()
으로 결과 비트 맵에 필터를 적용 할 수 있습니다.나는 보통 후자를 선택합니다. 그것은 매우 간단합니다. 몇 가지 단점이 있습니다. 두 번째 방법을 선택하면 대상에 부모 목록이 있어야하고 부모 컨테이너에있는 원치 않는 콘텐츠를 그릴 수 있습니다. (그러나 이러한 단점은 쉽게 제거됩니다.)
// bounds and size of parent in its own coordinate space
var rect:Rectangle = target.parent.getBounds(target.parent);
var bmp:BitmapData = new BitmapData(rect.width, rect.height, true, 0);
// offset for drawing
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
// Note: we are drawing parent object, not target itself:
// this allows to save all transformations and filters of target
bmp.draw(target.parent, matrix);
:
public static function cloneDpObj(target:DisplayObject):Bitmap
{
var duplicate:Bitmap;
var tBitData:BitmapData = new BitmapData(target.width, target.height);
tBitData.draw(target);
duplicate = new Bitmap(tBitData);
//add the filters
duplicate.filters = target.filters;
return duplicate;
}
을
글쎄, 이것은 옵션이지만 이미지 영역에 대해서도해야합니다. 변환을 복사하려면 어쨌든 행렬 및 번역을 사용해야합니다. 부모 객체를 그리는 것보다 어렵다고 생각합니다. –
귀중한 시간을내어 주신 모든 분들께 진심으로 감사드립니다. 그 기능을 향상 시켰지만 더 좋았지 만 캡처 결과의 너비가 1 픽셀 오프셋이므로 비트 맵 데이터 너비에 1 픽셀을 추가하기로 결정 했으므로 좋은 방법은 아닙니다. 내가 지금해야만하기 때문에, 나는 아직 그 문제를 모른다. 여기에 우리의 기능이 지금 있습니다 : –
적용된 필터로 찍은 영역을 포함하여 DisplayObject의 영역/사각형을 계산해야합니다. 다행히도 BitmapData 클래스의 generateFilterRect() 메서드를 사용하여 기본 제공 기능을 사용하여이 작업을 수행 할 수 있습니다.
또한 다른 이유로 인해 BitmapData 스냅 샷에 적용된 DisplayObject의 변형이 필요한 경우 소스 DisplayObject의 .transform을 전달할 수 있습니다. concatenatedMatrix을 BitmapData의 draw() 메서드의 두 번째 매개 변수로 사용합니다.
많은 시간을내어 귀중한 시간을내어 주셔서 감사합니다. 그 기능을 향상 시켰지만 더 좋았지 만 캡처 결과의 너비가 1 픽셀 오프셋이므로 비트 맵 데이터 너비에 1 픽셀을 추가하기로 결정 했으므로 좋은 방법은 아닙니다. 내가 지금해야만하기 때문에, 나는 아직 그 문제를 모른다. 여기에 우리 함수가 어떻게되어 있습니까?
public static function cloneDpObj(target:DisplayObject, optWidth:Number = -1, optHeight:Number = -1):Bitmap
{
var duplicate:Bitmap;
if (!target.parent) {
var tempSprite:Sprite = new Sprite;
tempSprite.addChild(target);
}
var rect:Rectangle = target.parent.getBounds(target.parent);
var bmp:BitmapData = new BitmapData(rect.width + 1, rect.height, true, 0);
// offset for drawing
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
// Note: we are drawing parent object, not target itself:
// this allows to save all transformations and filters of target
bmp.draw(target.parent, matrix);
duplicate = new Bitmap(bmp);
return duplicate;
}
'width'와'height' 대신에'DisplayObject.getBounds' 메서드를 사용하여 치수를 얻으려고 했습니까? 또한, 함수'cloneDpObj'의 이름을 오해의 소지가 있습니다.'DisplayObject'를 복제하지는 않습니다 만, 비트 맵 이미지를 복제하는 것이 가장 좋습니다. 단순히 새로운 Bitmap으로 렌더링한다고해도 말입니다. "클로닝"은 사람들이 코드를 읽는 맥락에서 꽤 잘 정의 된 의미를 가지고 있습니다. – amn