2013-10-22 1 views
1

나는 이미지를 가로로 스크롤하는 법을 배우려고합니다. 사용자가 정수를 입력하면 반환 된 이미지는 그 양만큼 왼쪽으로 이동 한 새 이미지가되고 가장 왼쪽 픽셀이 이미지의 오른쪽에 나타납니다. 나는 이것을 알아내는 것에 가까워지고 있지만 Out of Bounds 오류를 겪고있다.가로 사용자가 정의한 양만큼 이미지 스크롤

아이디어가 있으십니까? Image Manipulation과 프로세싱에 익숙하지 않습니다.

여기까지 제가 작성한 내용입니다.

public void scrollHorizontal(int numpixels){ 
    horizontalscroll = new Picture(image6.getWidth(), image6.getHeight()); 

    for (int i = 0; i<image6.getWidth(); i++){ 
     for (int j=0; j<image6.getHeight(); j++){ 
      pix2 = image6.getPixel(i, j); 
      horizontalscroll.setPixel(i-numpixels, j, pix2); 
      System.out.println(i); 
     } 
    } 
    for (int i = 0; i< image6.getWidth(); i++){ 
     for (int j = 0; j<image6.getHeight(); j++){ 
      pix2 = horizontalscroll.getPixel(i, j); 
      horizontalscroll.setPixel(image6.getWidth()-numpixels-i ,j, pix2); 
      //System.out.println(i); 
     } 

    } 
    horizontalscroll.store("scrollhorizontal.gif"); 
} 

그림 클래스는 (x, y)를 기반으로 한 그림 개체를 만듭니다. getPixel()은 Picture 클래스의 한 메서드입니다. 'pix2'는 Pixel 객체입니다.

답변

0

내가 좀 더 시행 착오 후에 그것을 알아내는 끝났다. 감사. 그냥 나눌 줄 알았어!

public void scrollHorizontal(int numpixels){ //allows the user to define numpixels to scroll horizontally by. 
    int height = image6.getHeight();  //creates a new image that is scrolled horizontally by the entered numpixels amount. 
    int width = image6.getWidth(); 
    horizontalscroll = new Picture(image6.getWidth(), image6.getHeight()); 
    for (int i = numpixels; i < width; i++){ 
     for (int j = 0; j < height; j++){ 
      pix2 = image6.getPixel(i, j); 
      horizontalscroll.setPixel(i-numpixels, j, pix2); 
     } 
    } 
    for (int i = 0; i < numpixels; i++){ 
     for (int j = 0; j < height; j++){ 
      pix2 = image6.getPixel(i, j); 
      horizontalscroll.setPixel((width-numpixels) + i, j, pix2); 
     } 
    } 
    horizontalscroll.store("scrollhorizontal.gif"); //stores new picture object to a new file. 
} 
0

버그는이 같은 라인에 있습니다 :

horizontalscroll.setPixel(i-numpixels, j, pix2); 

내가 numPixels보다 작은

, 당신은 부정적인 좌표 값을 설정하려고합니다.

원래 올바른 해결책은 다음과 같습니다

public void scrollHorizontal(int numpixels){ 
    int wid = image6.getWidth(); 
    int hei = image6.getHeight(); 
    if (wid < Math.abs(numPixels)) { 
    numPixels = numPixels % wid; 
    } 
    horizontalscroll = new Picture(); 
    if (numpixels >= 0) { 
    for (int i = 0; i< hei; i++){ 
     for (int j = 0, h = wid - numPixels - 1; j < numPixels; ++j, ++h) { 
     pix2 = image6.getPixel(i, h); 
     horizontalscroll.setPixel(i, j, pix2); 
     } 
     for (int j = numPixels, h = 0; j< wid; ++j, ++h){ 
     pix2 = image6.getPixel(i, h); 
     horizontalscroll.setPixel(i, j, pix2); 
     } 
    } 
    } else { 
    for (int i = 0; i< hei; i++){ 
     for (int j = 0, h = numPixels; j< wid - numPixels - 1; ++j, ++h) { 
     pix2 = image6.getPixel(i, h); 
     horizontalscroll.setPixel(i, j, pix2); 
     } 
     for (int j = wid - numPixels, h = 0; j < wid; ++j, ++h) { 
     pix2 = image6.getPixel(i, h); 
     horizontalscroll.setPixel(i, j, pix2); 
     } 
    } 
    } 

}

+0

정확하지만 보이지 않는 오류가 발생했습니다. – user2376566

+0

디버거를 열 시간이 부족합니까? –

관련 문제