오류 구문 질문


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 형식으로 파일을 생성 한다. }

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

  • 2016년 05월 10일에 작성됨

조회수 246


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] 같이 접근하면 발생하는 에러입니다.

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

  • 2016년 05월 12일에 수정됨
  • 2016년 05월 10일에 작성됨

  • 제가 질문을 잘못 올려서 소스가 제대로 안올라갔는데 어떤 쪽에 배열이 들어갔는지 잘 모르겠어서...    jason   2016.5.10 15:45     
  • BufferedImage의 setRGB()함수 원형은 다음과 같습니다 : setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)    Napier   2016.5.10 15:53     
  • 이 중 5번째 인자인 rgbArray의 값에다가 pixels 라는 배열 값을 넣으신거 같은데, 해당 값이 잘못되지 않았나 생각됩니다. pixels 배열의 선언부나 값 할당부 코드도 올려주세요 ~    Napier   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 선언부분이 잘못된 것 같군요    Napier   2016.5.10 16:10     
  • int pixels[] = new int[destWidth+destHeight];    Napier   2016.5.10 16:10     
  • 이 부분이 더하기(destWidth+destHeight)로 되어 있는데, 픽셀에 대한 정보니까 곱하기(destWidth*destHeight)가 되어야 하지 않을까 생각됩니다    Napier   2016.5.10 16:10     
  • 아 그런가요...??? 어떤 부분이 잘못됐을까요...??    jason   2016.5.10 16:11     
  • 아....!!!!!!! 감사합니다!!!!!    jason   2016.5.10 16:12     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close