繁体   English   中英

使用EventHandler增加2D数组的值

[英]Using an EventHandler to increase values of an 2D array

我正在尝试使用滑块来增加2D数组的值。 我本质上是想增加由RG和B数组写入的图像的亮度。我相信我的方法被正确调用并且正在侦听滑块值,但是现在我担心值超过255。我在模运算符中添加了为了防止这种情况,但我从将金额添加到索引的那一行开始收到ArrayOutOfBoundsException。 我添加了打印语句,以查看值是否更改,并且它们没有更改,但是每当我移动滑块时,就会出现ArrayOutOfBoundsException。

AdjustBrightness方法,用于更改数组的值:

     public void adjustBrightness(int amount) {

        int gimmieRows = thePPMImage.getNumRows();
        int gimmieCols = thePPMImage.getNumCols();
        int[][] gimmieRed = thePPMImage.getRedPixels();
        int[][] gimmieBlue = thePPMImage.getBluePixels();
        int[][] gimmieGreen = thePPMImage.getGreenPixels();
        int[][] brighterRedPixels =new int[gimmieRed.length][gimmieRed[0].length];
        int [][] brighterGreenPixels = new int[gimmieGreen.length][gimmieGreen.length];
        int [][] brighterBluePixels = new int[gimmieBlue.length][gimmieBlue[0].length];


        for (int i = 0; i < gimmieRows; i++) {
            for (int j = 0; j < gimmieCols; j++) {
                  if ((i+amount)%255>1.0 || (j+amount)%255>1.0) {
                      amount =amount-255;}
                  else  ((i+amount)%255<=1.0 || (j+amount)%255<=1.0)
                        {amount=amount;}
                System.out.println(gimmieRed[11][7]);

                brighterRedPixels[i][j] = amount + gimmieRed[i][j];
                brighterGreenPixels[i][j] = amount + gimmieGreen[i][j];
                brighterBluePixels[i][j] = amount + gimmieBlue[i][j];

                System.out.println(gimmieRed[11][7]);
                System.out.println(brighterRedPixels[11][7]);


            }

        } 
        thePPMImage = new PPMImage(brighterRedPixels, brighterGreenPixels,brighterBluePixels );
                thePPMImage.setRedPixels(brighterRedPixels);
                thePPMImage.setGreenPixels(brighterGreenPixels);
                thePPMImage.setBluePixels(brighterBluePixels);
                imageLabel.setIcon(new SImage(
                        transposeArray(thePPMImage.getRedPixels()),
                        transposeArray(thePPMImage.getGreenPixels()),
                        transposeArray(thePPMImage.getBluePixels())));

更改滑块的侦听器。

public class event implements ChangeListener {
     public void stateChanged (ChangeEvent e){

        int amount = brightnessSlider.getValue();
        adjustBrightness(amount);

任何见解将不胜感激,此作业应于昨天完成。

我目前看到的ArrayOutOfBoundsException的唯一原因是gimmieRed[11][7]brighterRedPixels[11][7]的println。 如果这些数组之一没有12行或8列,则将引发异常。

如果添加(简化)了PPMImageSImage类以及transposeArray方法的版本,则将有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM