매우 작은 배율로 조정 한 후에 부드럽게 적용하려면 비트 맵을 가져 오는 데 도움이 필요합니다.낮은 배율 값에서 AS3 비트 맵 객체가 스무딩되지 않음
현재 내가하고있는 일은 .png 이미지를 Loader 개체로로드하는 것입니다. 파일을로드 한 후 loaderInfo의 내용을 비트 맵에 캐스팅하고 smoothing 값을 true로 설정합니다. 이것은 ScaleX와 ScaleY 값이 0.5 미만이 될 때까지 문제없이 작동합니다.
예를 들어, 1000x1000 오브젝트가있는 경우 200x200으로 축소하면 비트 맵 스무딩이 더 이상 작동하지 않습니다.
- 변경 비트 맵에 scaleX가 및 scaleY 속성 :
나는 다음과 같은 크기 조정 방법을 모두 사용하여 문제를 재현 할 수 있습니다.
- 비트 맵의 높이 및 너비 속성을 직접 변경하십시오.
- 비트 맵을 다른 스프라이트의 자식으로 추가하고 스프라이트의 scaleX 및 scaleY 속성을 변경합니다.
- 비트 맵을 다른 스프라이트의 자식으로 추가하고 스프라이트의 높이 및 너비 속성을 변경합니다.
- 매트릭스 스케일을 사용하여 새 BitmapData 객체를 만든 다음 원본 BitmapData를 그 위에 드래그합니다.
- 비트 맵의 높이와 너비를 강제 1.001 또는 0.999
- 에 이미지의 scaleX 설정 :
는 또한 같은 검색 할 때 내가 찾은 다른 해결 방법을 시도했습니다 짝수 인 개체.
다음은 문제를 재현하기위한 샘플 코드입니다.
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()를 통해 작은 BitmapData 복사본을 만들고 사본 크기를 조정하여이 문제를 해결할 수 있습니다. 이것은 복사본 생성과'bitmap.bitmapData' 스위칭을위한 로직을 필요로합니다. –
팁 주셔서 감사.:)이 작업을 시도했지만 제대로 작동했지만 현재 렌더링 아키텍처에 잘 맞지 않습니다. 최악의 상황이 발생하면 그것을 처리 할 방법을 찾을 것입니다. –