非常に小さくスケーリングされた後にスムージングを適切に適用するには、ビットマップを取得する手助けが必要です。低スケール値でAS3ビットマップオブジェクトが平滑化されない
私が今やっていることは、.pngイメージをLoaderオブジェクトで読み込むことです。ファイルをロードした後、loaderInfoのコンテンツをビットマップにキャストし、スムージング値をtrueに設定しました。これは、ScaleXとScaleYの値が0.5未満になるまで問題なく動作します。
たとえば、1000x1000オブジェクトがある場合、200x200に縮小すると、ビットマップスムージングが機能しなくなります。
- 変更ビットマップ上のscaleXプロパティとscaleYプロパティ:
は、私は次のサイジング方法のすべてを使用して問題を再現することができます。
- ビットマップの高さと幅のプロパティを直接変更します。
- ビットマップを別のスプライトの子として追加し、スプライトのscaleXおよびscaleYプロパティを変更します。
- ビットマップを別のスプライトの子として追加し、スプライトの高さと幅のプロパティを変更します。
- 行列スケールで新しいBitmapDataオブジェクトを作成し、元のBitmapDataを描画します。
- ビットマップの高さと幅を強制的に1.001又は0.999
- に画像のscaleXプロパティを設定:
Iはまたなど、検索時に私が見つけた他のいくつかの回避策を試してみました偶数のオブジェクトになります。
以下は、問題を再現するためのサンプルコードです。
public class MainObj
{
public var comp:UIComponent;
public function MainObj()
{
}
public function LoadContent():void
{
var str:String = "testimage.png";
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadContentComplete);
l.load(new URLRequest(str));
}
public function LoadContentComplete(e:Event):void
{
var li:LoaderInfo = e.target as LoaderInfo;
var bmp:Bitmap = li.content as Bitmap;
bmp.smoothing = true;
bmp.scaleX = 0.2;
bmp.scaleY = 0.2;
comp.addChild(bmp);
}
}
は、私はまた、MainObjクラスのインスタンスを作成し、にコンププロパティを設定するMXMLファイルを持っている(私はビン-debugフォルダーにtestimage.pngのコピーを持っているので、私はローカルでこれを実行しています)アプリケーションmxmlコードに追加されたUIComponantインスタンス(UIComponentは、mxmlを構成するSpark要素にビットマップを追加できるようにするものです)。元のサイズも2
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600"
width="800" height="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
private var mainObj:MainObj;
override protected function initializationComplete():void
{
mainObj = new MainObj();
mainObj.comp = comp;
mainObj.LoadContent();
super.initializationComplete();
}
]]>
</fx:Script>
<s:VGroup width="100%" height="100%">
<mx:UIComponent id="comp" width="100%" height="100%"/>
</s:VGroup>
</s:Application>
この問題を回避するには、BitmapData.draw()を使用してより小さなコピーを作成し、コピーをスケーリングします。これは、コピー作成と 'bitmap.bitmapData'スイッチングのためのいくつかのロジックを必要とします。 –
チップをありがとう。:)私はこれを試して、それは動作しますが、私の現在のレンダリングアーキテクチャにうまく収まらないでしょう。悪化すると悪化するでしょう。私はそれを働かせる方法を見つけるでしょう。 –