水平按用户定义的数量滚动图像

时间:2013-10-22 22:22:01

标签: java image-processing

我正在尝试学习如何水平滚动图像。假设用户输入一个整数,则返回的图像将是向左移动该量的新图像,最左侧的像素将出现在图像的右侧。我一直在接近解决这个问题,但我遇到了Out of Bounds错误。

有什么想法吗?我对图像处理和处理非常陌生。

这是我到目前为止所写的内容。

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");
}

Picture类只是根据(x,y)创建一个图片对象。 getPixel()是Picture类的一个方法。 'pix2'是一个Pixel对象。

2 个答案:

答案 0 :(得分:0)

你的错误就像这一行:

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

当i小于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);
      }
    }
  }

}

答案 1 :(得分: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.
}