오류 구문 질문

조회수 2631회

java.lang.ArrayIndexOutOfBoundsException: 700 at java.awt.image.BufferedImage.setRGB(Unknown Source) at com.wein.wincos.cc.ImageUtill.resize(ImageUtill.java:70) at com.wein.wincos.cc.convContCtl.photoSend(convContCtl.java:200) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source)


이러한 오류구문이 나는데 실제 코드를 보면 try { pg.grabPixels(); //이미지 줄이기를 실행 하고 } catch (Exception e) { throw new IOException(e.getMessage()); } BufferedImage destImg = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); destImg.setRGB(0, 0, destWidth, destHeight, pixels, 0, destWidth); //읽어들은 이미지를 ImageIO.write(destImg, "jpg", dest); //썸네일이미지.jpg 형식으로 파일을 생성 한다. }

이쪽 부분인거 같은데 도저히 왜 그런지 모르겠는데 혹시 답변해 주실 분들 답변 부탁드립니다.

1 답변

  • 내용 다시 정리합니다.

    2차원 데이터 배열 선언 부분에서 width와 height를 곱하기(*)가 아닌 더하기(+)로 잘못 기술하였습니다.

    요약하면 다음과 같습니다.

    int pixels[] = new int[destWidth+destHeight];  //pixel은 2차원 데이터 배열인데 곱하기(*)가 아닌 더하기(+)로 기술함
    
    destImg.setRGB(0, 0, destWidth, destHeight, pixels, 0, destWidth); // pixels 크기와 destWidth, destHeight의 크기가 맞지 않아 ArrayIndexOutOfBounds 에러가 발생함
    

    지난 답변.

    Out Of Bounds 에러 입니다.

    즉, 할당된 배열 범위를 벚어난 곳에 접근하면 나는 에러입니다.

    예를 들어 int i[100] 인데, i[101] 같이 접근하면 발생하는 에러입니다.

    해당 배열의 크기와, 에러가 난 부분을 살펴보세요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 제가 질문을 잘못 올려서 소스가 제대로 안올라갔는데 어떤 쪽에 배열이 들어갔는지 잘 모르겠어서... jason 2016.5.10 15:45
    • BufferedImage의 setRGB()함수 원형은 다음과 같습니다 : setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) 알 수 없는 사용자 2016.5.10 15:53
    • 이 중 5번째 인자인 rgbArray의 값에다가 pixels 라는 배열 값을 넣으신거 같은데, 해당 값이 잘못되지 않았나 생각됩니다. pixels 배열의 선언부나 값 할당부 코드도 올려주세요 ~ 알 수 없는 사용자 2016.5.10 15:54
    • Image imgTarget = srcImg.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH); //이미지를 깨짐 없이 부드럽게 줄여 줄 수 있게 한다. int pixels[] = new int[destWidth+destHeight]; //전체 픽셀 값을 계산 한다. PixelGrabber pg = new PixelGrabber(imgTarget, 0, 0, destWidth, destHeight, pixels, 0, destWidth); //크기에 따라 이미지도 자연스럽게 줄여 준다. jason 2016.5.10 16:07
    • 네네 저도 이쪽인거 같다고 생각은 했는데 width와 height 값을 그대로 가져오는 건데....흠 jason 2016.5.10 16:07
    • pixels 선언부분이 잘못된 것 같군요 알 수 없는 사용자 2016.5.10 16:10
    • int pixels[] = new int[destWidth+destHeight]; 알 수 없는 사용자 2016.5.10 16:10
    • 이 부분이 더하기(destWidth+destHeight)로 되어 있는데, 픽셀에 대한 정보니까 곱하기(destWidth*destHeight)가 되어야 하지 않을까 생각됩니다 알 수 없는 사용자 2016.5.10 16:10
    • 아 그런가요...??? 어떤 부분이 잘못됐을까요...?? jason 2016.5.10 16:11
    • 아....!!!!!!! 감사합니다!!!!! jason 2016.5.10 16:12

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)