2014-01-23 2 views
0

wanky 제목의 경우. 짧은 임신 설명이 떠오르지 않았다.getScaledInstance 이후의 높이와 너비 -1 java 이미지

내 문제는 코드 줄은 다음과 같습니다

ii = new ImageIcon("images/player.png"); 
image = ii.getImage(); 
image = image.getScaledInstance(SCALED_X, SCLAED_Y, Image.SCALE_SMOOTH); 
positionX = windowWidth/2 - image.getWidth()/2; 
positionY = windowHeight - image.getHeight(); 

나는 이미지가의 getScaledInstance 함수를 호출 한 후 높이 -1의 폭을 가지고 것으로 나타났습니다 코드, 따라서 마지막 두 줄을 디버깅 잘못된 결과를 반환합니다. 내가 생각해 낸 해결 방법은 SCALED_X와 SCALED_Y를 새로운 높이와 너비로 사용하고 있지만 그다지 예쁜 것은 아닙니다 .- 신장과 너비가 -1 인 이유를 누구나 설명 할 수 있습니까? getScaledInstance 함수를 사용할 때 이러한 속성이 손실됩니까 (설명서에서 해당 단어를 찾을 수 없음)? 이미지에 다시 추가 할 수있는 방법이 있습니까?

이미지의 크기를 줄이고 resp를 유지할 수있는 방법이 있습니까? 속성을 자동으로 조정합니까?

편집 : 함께 -1 여전히 :(지속

+1

ImageIO를 사용하여 이미지를로드합니다. ImageIcon은 Swing 구성 요소, 즉 GUI의 일부입니다. 스윙을 사용하여 GUI를 만들지 않을 경우에는 사용하지 마십시오. – Njol

+0

그게 전부입니다. 그걸 몰랐어. 실제 문제에 대해 알고 싶습니까? – datosh

+0

ImageIcon에 의해 내부적으로 사용되는 Image는, 사이즈 변경을 지원하지 않기 때문에, 그 메소드로부터 무효 인 이미지를 돌려줍니다. – Njol

답변

0

사용 된 방법의 Javadoc과 화상 판독이되지 않았 음을 시사

try { 
    image = ImageIO.read(new File("images/player.png")).getScaledInstance(SCALED_X, SCLAED_Y, Image.SCALE_SMOOTH);   
} catch (IOException e) { 
    e.printStackTrace(); 
} 

오류 : 이미지를 얻을 수

변경된 코드 getHeight/getWidth를 호출 할 때 아직 크기가 조절되었습니다.

getScaledInstance() :

이 이미지의 크기가 조절 된 버전을 만듭니다. 디폴트로 지정된 폭과 높이로 이미지를 렌더링하는 새로운 Image 객체가 반환됩니다. 원본 이미지가 이미 완전히로드 된 경우에도 새 이미지 개체 이 비동기 적으로으로로드 될 수 있습니다.

getHeight는()

이미지의 높이를 결정한다. 높이가 정의되어 있지 않은 경우 ,이 메소드는 -1을 돌려줍니다 당신은 몇 가지 옵션이 있습니다

: 당신은 이미지를 확장 할 때까지 기다리거나 필요한 값을 계산하기 위해의 ImageObserver를 사용할 수있는 폭 높이를 사용할 수있게되거나 image.getWidth/Height 대신 SCALED_X/Y 상수를 사용하거나 새 BufferedImage를 만들고 이전 이미지를 새로운 이미지에 페인팅하여 직접 이미지의 크기를 조절할 수 있습니다.

또 다른 가능성은 단순히 플레이어 이미지가 올바른 크기라고 가정하는 것입니다. 이렇게하면 게임로드 속도가 빨라지고 플레이어가 아티스트가 그렸던 그대로 게임에 나타나게됩니다.

+0

답변 해 주셔서 감사합니다. 그 맥락에서 의미하는 "비동기 적으로로드 된"것을 실제로 알지 못했습니다. 난 그냥 내 SCALED_X/Y를 사용하고 게임이 실행될 때이 값들은 항상 사용할 수 있어야한다 ... 나는 추측한다;) – datosh

관련 문제