簡體   English   中英

在 ArrayList 中存儲數千個 BufferedImages 而不用完所有內存 - Java

[英]Store thousands of BufferedImages in ArrayList without using up all memory - Java

我正在嘗試制作屏幕錄制應用程序。 我有使用java.awt.Robot.createScreenCapture截取屏幕截圖的代碼,然后將輸出存儲在一個數組列表中。 arraylist 需要存儲7500 個圖像。 我需要能夠非常快速地訪問任何BufferedImages 我曾嘗試將BufferedImages轉換為byte[]然后存儲它們,但將它們轉換回 bufferedimages 花費的時間太長(大約 1 秒)。 有沒有一種方法可以做到這一點而不必添加命令行參數?

錯誤: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

代碼:

static ArrayList < BufferedImage > bilist = new ArrayList < BufferedImage > ();
public static Timer recordingTimer = new Timer (40, new ActionListener () {

    public void actionPerformed ( ActionEvent e ) {

        try {

            BufferedImage bimage = robot.createScreenCapture(wholescreen);
            bilist.add(bimage);
            if ( bilist.size() > 7500 ) bilist.remove(7500);

        } catch ( Exception ex ) {

            ex.printStackTrace();

        }

    }

});

真正的解決方案:使用硬件加速的視頻編碼器(如果您能負擔得起 CPU,則使用軟件編碼器)壓縮幀

舊答案:

我已經解決了我的問題! 我所做的是將 5 分鍾的錄制更改為 15 秒,然后將 BufferedImages 的類型更改為 TYPE_BYTE_INDEXED,然后將圖像尺寸減半,然后降低幀速率。 將來,我可能會讓這個程序與 Gilbert Le Blanc 的系統一起工作(請看上面的評論)。

暫無
暫無

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

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