我正在努力学习如何水平滚动图像。假设用户输入了一个整数量,返回的图像将是一个新的图像,该值将向左移动,而左边的大多数像素将出现在图像的右侧。我一直想弄清楚这一点,但是我遇到了一些错误。
有什么想法吗?我对图像处理和处理非常陌生。
到目前为止我写的都是这样的。
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‘是一个像素对象。
发布于 2013-10-23 05:44:06
经过多次反复试验,我终于明白了这一点。谢谢。我只是想和你分享!
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.
}发布于 2013-10-23 00:47:26
您的bug位于类似于此的行中:
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);
}
}
}}
https://stackoverflow.com/questions/19529453
复制相似问题