gpt4 book ai didi

apache-flex - 不能将 ImageSnapshot.captureBitmapData 与旋转矩阵一起使用

转载 作者:行者123 更新时间:2023-12-04 07:09:59 25 4
gpt4 key购买 nike

有没有人有使用 ImageSnapshot.captureBitmapData 函数和旋转矩阵的例子?这是我正在使用的代码:

var matrix:Matrix = new Matrix();
matrix.rotate(degreesToRadians(90));
var bitmapData:BitmapData = ImageSnapshot.captureBitmapData(textInput, matrix);

但不幸的是,这会在 ImageSnapshot.as 的以下行中引发错误:
data = new BitmapData(scaledWidth, scaledHeight, true, 0x00000000); // <-- THROWS ERROR HERE AS scaledWidth / scaledHeight are extremely small numbers (-1-e16 etc)
data.draw(source, matrix, colorTransform,
blendMode, clipRect, smoothing);
}
finally
{
if (source is IUIComponent)
finishPrintObject(IUIComponent(source), normalState); // <-- ERROR THROWN HERE, BUT CAUSE OF ERROR IS ABOVE
}

我试图实现的是文本输入控件的旋转位图(我试图避免在应用程序中嵌入字体)。当我不旋转位图时,这段代码工作得很好,但是我旋转它的那一刻,它就坏了。

接受后的答案编辑

我在最初的问题中使用了一个加载器类,我也想要文本 270degrees - 所以这是执行此操作的文本:
var matrix:Matrix = new Matrix();
matrix.rotate(Math.PI * 1.5);
matrix.translate(0, copyThis.width);

var bitmapData:BitmapData = ImageSnapshot.captureBitmapData(copyThis, new Matrix());
var rotatedBitmap : BitmapData = new BitmapData(bitmapData.height, bitmapData.width, false, 0xFFFF0000);

rotatedBitmap.draw(bitmapData, matrix);

loader.load(new Bitmap(rotatedBitmap));

谢谢!

最佳答案

我刚刚能够重现这个,所以它确实看起来像是 ImageSnapshot 类中的错误。我能想到的只是它没有使用旋转矩阵进行测试,所以它完全被遗漏了。显然,试图创建一个小于 1x1 的 bitmapData 是它抛出错误的原因。老实说,似乎无论如何都不能圆它。

认为您最好的选择可能是创建自己的简化快照类,或者仅使用单位矩阵来获取原始位图,然后将其复制到可以容纳旋转版本的新位图数据中。

编辑

另一个注意事项...由于闪存组件是从右上角注册的,您还需要按原始高度平移矩阵。虽然这可能已经解决了最初的问题,但它仍然会中断。这是一个使用新 BitmapData 并转换 ImageSnapshot 创建的解决方案

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.graphics.ImageSnapshot;


private function clickHandler(event : MouseEvent) : void
{
var matrix:Matrix = new Matrix();
matrix.rotate(Math.PI / 2);
matrix.translate(copyThis.height, 0);

var bitmapData:BitmapData = ImageSnapshot.captureBitmapData(copyThis, new Matrix());
var rotatedBitmap : BitmapData = new BitmapData(bitmapData.height, bitmapData.width, false, 0xFFFF0000);

rotatedBitmap.draw(bitmapData, matrix);

var g : Graphics = copyTo.graphics;

g.clear();
g.beginBitmapFill(rotatedBitmap);
g.drawRect(0,0, rotatedBitmap.width, rotatedBitmap.height);
g.endFill();
}
]]>
</mx:Script>

<mx:VBox width="100%" height="100%" horizontalAlign="center">
<mx:Canvas width="100%" height="100%">
<mx:TextInput id="copyThis" text="COPY THIS" horizontalCenter="0" verticalCenter="0"/>
</mx:Canvas>
<mx:Canvas id="copyTo" width="100%" height="100%" />
<mx:Button id="copyIt" label="COPY IT" click="clickHandler(event)" />
</mx:VBox>
</mx:Application>

关于apache-flex - 不能将 ImageSnapshot.captureBitmapData 与旋转矩阵一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526119/

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