2013-02-16 7 views
1

가장 긴면을 기준으로 이미지의 크기를 조정해야합니다 (예 : 너비 또는 높이가 될 수있는 가장 긴면은 단지 100 픽셀이어야합니다. 먼저 이미지가 다시이있는 디스크에서 읽을 수보다 긴 쪽 어느 쪽 알아 내기 위해 디스크에서 읽을 수있다, 그래서이미지를 디스크에서 다시 읽지 않고 크기를 조정 하시겠습니까?

private Image resizeImageByLongestSide(File imageFile, int lengthLongestSide) 
{ 
    String uri ="file:" + imageFile.getAbsolutePath(); 
    Image image = new Image(uri); // raed to determine width/height 

    // read image again for resizing 
    if(image.getWidth() >= image.getHeight()) 
     return new Image(uri, lengthLongestSide, 0, true, false); 
    else 
     return new Image(uri, 0, lengthLongestSide, true, false); 
} 

:

현재 나는이 방법을 사용하고 있습니다 왜냐하면 크기 조정은 Image 생성자를 사용하는 것만으로 보이기 때문입니다 ... 이것에 대한 힌트/개선? 덕분에

답변

1

불변 최종 솔루션에 가까웠다는 최종 솔루션에 대한 크레딧 l2p in the oracle forum로 이동 :이 장면에 있는지 여부를

이미지 뷰는 실제 이미지를 변경하지 않습니다 아닙니다. 주어진 이미지에서 보이는 노드 만 렌더링합니다. 현재 보이는 상태에서 새 이미지를 렌더링하려면 스냅 샷()을 만들어야합니다. 그래서 :

Image resizedImage = myImageView.snapshot(null, null); // after using myImageView.setFitHeight()/setFitWidth/(etc. 

버그 수정 : (: 이미지 뷰 여기, 여기) 배경 흰색이고 기본 제어하기 때문에

투명성이, 현재의 접근 방식으로 손실됩니다. 흰색의 투명도 스크린 샷 (이미지에서)이 흰색을 주므로 원래의 투명도가 느슨해집니다. 이를 위해 배경을 투명하게 설정하십시오.

그래서, 고정 코드 :

SnapshotParameters params = new SnapshotParameters(); 
params.setFill(Color.TRANSPARENT); 
return imageView.snapshot(params, null); 

지옥, 까다로운이 물건 ;-) 답장을 보내

1

:-) 당신이 필요 ImageView

로드 이미지를 메모리에 한 번, 그리고 u는 이제까지 필요로 할 때 다음 이미지 뷰에 조작을한다.

샘플 코드 :

//load image to memory 
final static Image MY_IMAGE = new Image(path of image file); 
//create different imageviews pointing to image in memory and do manipulations 
ImageView myImage = new ImageView(MY_IMAGE); 
myImage.setFitHeight(value); 
myImage.setFitWidth(value); 
+0

덕분에, 불행하게도 내 이미지 뷰는 나는 그것이 있다고, 이유는 가정, 이미지 크기를 조정하는 것을 거부 어떤 장면에도 붙어 있지 않습니다. 자세한 내용은이 게시물을 참조하십시오 : http://stackoverflow.com/questions/14924995/imageview-not-resizing-image –

+0

질문 (나는 이미지 크기를 조정하고 장면에 표시하는 줄 알았는데), 조작을 오해 한 것 같습니다. imageview doesnt는 실제 이미지에 영향을 미치지 않습니다. 이것은 장면에 붙이는 것과 관련이 없습니다. – invariant

+0

슬픈 정보에 감사드립니다.) –