2009-10-20 4 views
2

크기 조정 된 이미지로 bytearray를 표시하려고합니다. 이미지가 올바르게 표시되지만 크기 조정은 꺼져 있습니다. 설명하겠습니다.디코딩 된 ByteArray의 이미지 크기 조정

먼저 내가 인코딩 된 영상 데이터 그래서이 작품 이미지 데이터

// Instantiate decoder 
var decoder:Base64Decoder = new Base64Decoder(); 
// Decode image data 
decoded.decode(picture.data); 
// Export data as a byteArray 
var byteArray:ByteArray = decoder.toByteArray(); 
// Display image 
var img:Image = new Image(); 
img.load(byteArray); 

를 디코딩 할 필요가있다. 이미지가 올바르게 표시됩니다. 그러나 이미지 (img) 높이를 하드 코딩하면 크기가 조정 된 이미지가 올바르게 표시되지만 원본 이미지의 크기가있는 상자 안에 표시됩니다.

예를 들어 원본 이미지의 높이가 300px이고 너비가 200px이고 img.height 속성이 75로 설정된 경우, 높이가 75 인 리사이징 된 이미지가 올바르게 표시됩니다. 크기가 조정 된 이미지는 여전히 300px의 높이와 200px의 너비로 설정된 img 컨테이너의 왼쪽 상단 모서리에 표시됩니다. 왜 그렇게합니까? 그리고 그 수정은 무엇입니까?

문제를 설명하는 가장 좋은 방법은 이미지를 VBox 내부에 배치하고 VBox의 테두리를 표시하는 것입니다. 위의 코드 블록에서 이미지 높이를 변경하고 가로 세로 비율을 유지하도록 이미지를 설정하면 (기본적으로 true로 설정되지만 여기에 전체를 추가합니다). 문제는 분명해진다.

// Display image 
var img:Image = new Image(); 
img.height = 75; // Hardcode image height (thumbnail) 
img.maintainAspectRatio = true; 
img.load(byteArray); 
// Encapsulate the image inside a VBox to illustrate the problem 
var vb:VBox = new VBox(); 
vb.setStyle('borderStyle', 'solid'); 
vb.setStyle('borderColor', 'red'); 
vb.setStyle('borderThickness', 2); 
vb.addChild(img); 

저는 며칠 동안이 문제를 해결하기 위해 노력해 왔으며 해결 방법을 찾지 못했습니다. 어떤 아이디어? 내가 뭘 놓치고 있니? 다음

답변

1

I이 사용 된 해결책은 다음

는 I IMG는 디스플레이 오브젝트의 이벤트 리스너를 만들었다. 그런 다음 img가로드 된 후 수동으로 이미지의 높이와 너비를 설정합니다. 하드 코딩 된 높이 (preHeight) 원하는 것을 알고 있습니다. 그 다음 너비를 계산하고 이미지 너비로 설정합니다. 어떤 이유로 저는 explicitHeight 및 explicitWidth 속성을 사용하여 마지막으로 크기를 조정해야했습니다.

이 정보가 도움이되기를 바랍니다.

img.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 

private function onCreationComplete(event:FlexEvent) : void 
{ 
    img.addEventListener(Event.COMPLETE, onImageLoadComplete); 
} 

private function onImageLoadComplete(event:Event) : void 
{ 
    var image:Image = event.currentTarget as Image; 
    var preHeight:Number = 0; 
    var h:uint = Bitmap(image.content).bitmapData.height; 
    var w:uint = Bitmap(image.content).bitmapData.width; 

    // Check height 
    preHeight = h > 170 ? 170 : h; 
    // Set the width 
    img.explicitWidth = (preHeight * w)/h; 
    img.explicitHeight = preHeight; 
}