2016-11-18 7 views
0

다른 크기로 뷰의 크기를 축소하려고했지만 몇 가지 문제가 있습니다. 컨텍스트는 비디오 플레이어 내부에 있습니다 (VLCJ 사용).ArrayIndexOutOfBoundsException 스케일을 시도하는 중

이 코드는 이미지의 크기를 조절하는 데 사용되지만 첫 번째 프레임 이후 이미지는 어떤 이유로 다음 이미지로 업데이트가 중지됩니다.

public void newFrameRecieved(int[] rgbBuffer) 
{ 
    this.image.setRGB(0, 0, this.size.width, this.size.height, rgbBuffer, 0, this.size.width); 


    after = new BufferedImage(this.getWidth(), this.getHeight(), this.image.getType()); 
    at = new AffineTransform(); 
    scalingFactorX = (double)this.getWidth()/ (double)this.image.getWidth(); 
    scalingFactorY = (double)this.getHeight()/ (double)this.image.getHeight(); 
    at.scale(scalingFactorX, scalingFactorY); 
    scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); 
    this.image = scaleOp.filter(this.image, after); 


    repaint(); 
} 

중간 부분 (this.image.setRGB (...... 사이의 모든 코드)와() 다시 칠이) 경우 제거 작동 (스케일링 부분을 제외하고 ...)

여러분이 제공 할 수있는 도움에 정말 감사드립니다!

JNA: Callback uk.co.capr[email protected]4516af24 threw the following exception: 
java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds! 
    at sun.awt.image.IntegerInterleavedRaster.setDataElements(IntegerInterleavedRaster.java:301) 
    at java.awt.image.BufferedImage.setRGB(BufferedImage.java:1059) 
    at myVlcjWrapper.VideoSurfacePanel.newFrameRecieved(VideoSurfacePanel.java:65) 

내가 그것을 해결하는 방법에 대한처럼 우둔 해요 문제를 이해 : 받았다 오류는 다음과 같습니다! 감사합니다.

+0

크기를 조정하려는 이미지의 크기가 얼마나 큽니까? 픽셀 단위 – D3181

+0

'image.setRGB'의 기능은 무엇입니까? – bradimus

+0

현실적인 비디오 스트림이기 때문에 나는 말할 수 없다. 나는 1920x1080이라고 확신한다! – Payerl

답변

0

오류 검색을 많이 한 후에 나는이 작업 코드로 끝났습니다!

public void newFrameRecieved(int[] rgbBuffer, Dimension max) 
{ 
    before = new BufferedImage(max.width, max.height, BufferedImage.TYPE_INT_ARGB); 
    before.setRGB(0, 0, max.width, max.height, rgbBuffer, 0, max.width); 
    after = new BufferedImage(this.getWidth(), this.getHeight(), this.image.getType()); 
    at = new AffineTransform(); 
    scalingFactorX = (double)after.getWidth()/ (double)before.getWidth(); 
    scalingFactorY = (double)after.getHeight()/ (double)before.getHeight(); 
    at.scale(scalingFactorX, scalingFactorY); 
    scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); 
    this.image = scaleOp.filter(before, after); 

    repaint(); 
} 

최소한의 변경 사항이지만 트릭을 수행했습니다. 아무도 여기 다시 자신의 길을 찾지 못할 경우를 대비하여 게시하는 것이 가장 좋습니다. 도움 주셔서 감사합니다! :)