簡體   English   中英

ArrayList 沒有添加 BufferedImage?

[英]ArrayList doesnt add BufferedImage?

我在將 BufferedImages 添加到我的 ArrayList 時遇到了問題,它會添加它們,但是,我最好顯示一些代碼:

        }
            }
        }
        this.listOfLines.add(this.image.getSubimage(xMin, yMin, xMax, yMax - yMin));
        this.image = fillWhite(xMin, yMin, xMax, yMax, this.image);
        isWhite = white(this.image);
    }
    saveLines();
}

private void saveLines() {
    for(int i = 0; i < this.listOfLines.size(); i++){
        save(this.listOfLines.get(i), i);
    }
}

這是出現問題的代碼段。 (前后的代碼無關緊要,唯一要知道的是有一個BufferedImage,我在循環中切出一些子圖像(這里我找到了幾行文本並想將它們添加到listOfLines ArrayList中),然后將原始圖像的區域填充為白色,但在將子圖像添加到列表之后!)。 底部的 save 方法只是獲取一個 BufferedImage 並將其保存到特定路徑,僅用於檢查目的,我不想稍后保存所有內容,因為那會太多圖像。

問題:如果我現在將圖像添加到 listOfLines ArrayList 並立即保存,然后將原始圖像的區域填充為白色,然后在文件夾中查找,它可以完美運行。 但是在顯示的代碼中,問題是如果我將原始圖像添加到arraylist后直接將其填充為白色,那么arraylist中的圖像是白色的......但為什么呢?

保存每個子圖像時工作的代碼(其中 n 是保存的第 n 個圖像):

}
        this.listOfLines.add(this.image.getSubimage(xMin, yMin, xMax, yMax - yMin));
        save(this.image.getSubimage(xMin, yMin, xMax, yMax - yMin), n);
        this.image = fillWhite(xMin, yMin, xMax, yMax, this.image);
        isWhite = white(this.image);
    }

希望我描述的准確:/希望你能幫助我或建議另一種方式。 我的 B 計划是將每個圖像保存在一個文件夾中,然后再次讀取 arrayList 中的每個圖像並使用該圖像,但我認為這會浪費電力;)

你好

編輯:

好的,整個切割代碼是:

    public void cutLines(){
    boolean isWhite = false;

    while(!isWhite){

        int yMin = 0;
        int yMax = 0;
        int xMin = 0;
        int xMax = this.image.getWidth();
        boolean finished = false;
        boolean active = false;
        boolean lineWhite = false;

        for(int i = 0; i < this.image.getHeight(); i++){
            if(!finished){
                if(!active){
                    for(int j = 0; j < this.image.getWidth(); j++){
                        if(this.image.getRGB(j, i) == Color.BLACK.getRGB()){
                            active = true;
                            yMin = i;
                        }
                    }
                } else if(active){
                    lineWhite = true;
                    for(int j = 0; j < this.image.getWidth(); j++){
                        if(this.image.getRGB(j, i) == Color.BLACK.getRGB()){
                            lineWhite = false;
                        }
                    }

                    if(lineWhite){
                        active = false;
                        yMax = i;
                        finished = true;
                    }
                }
            }
        }
        this.listOfLines.add(this.image.getSubimage(xMin, yMin, xMax, yMax - yMin));
        this.image = fillWhite(xMin, yMin, xMax, yMax, this.image);
        isWhite = white(this.image);
    }
    saveLines();
}

private void saveLines() {
    for(int i = 0; i < this.listOfLines.size(); i++){
        save(this.listOfLines.get(i), i);
    }
}

如果有人想自己測試它,它需要一個黑白圖像(只需繪制並鍵入 2/3 行文本)。 如果您將最后幾行更改為:

listOfLines.add(this.image.getSubimage(xMin, yMin, xMax, yMax - yMin));
        save(this.image.getSubimage(xMin, yMin, xMax, yMax - yMin), n);
        n++;
        this.image = fillWhite(xMin, yMin, xMax, yMax, this.image);
        isWhite = white(this.image);

它為我保存了正確的圖像。 但是在上面的代碼中,ArrayList 中只有白色圖像。

你有沒有看BufferedImage.getSubImage()實際上是做什么的?

返回的 BufferedImage 與原始圖像共享相同的數據數組。

如果您確實想稍后保存,請創建一個副本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM