0
我正在嘗試製作屏幕錄製應用程序。我的代碼使用java.awt.Robot.createScreenCapture
進行截圖,然後將輸出存儲在數組列表中。數組列表需要存儲圖像。我需要能夠很快訪問任何BufferedImages
。我試圖將BufferedImages
轉換爲byte[]
然後存儲它們,但將它們轉換回bufferedimages需要很長時間(大約1秒)。有沒有辦法可以做到這一點,而無需添加命令行參數?在ArrayList中存儲數千個BufferedImages而不使用所有內存 - Java
錯誤: 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();
}
}
});
你做過數學嗎?一個屏幕的大小是多少?該陣列實際上有多少內存可用? – Mike
如果圖像的分辨率爲1920x1080,並且每個像素使用4個字節,則必須提供7500x1920x1080 * 4 /(1024x1024 1024)= 59.75 GB,以便將其保存在RAM中。那麼爲什麼你必須在內存中保存7500張圖片呢? – displayname
我需要7500的圖像,這樣如果在電腦上發生了什麼事情,你可以按一個按鈕,保存最後5分鐘發生的事情(7500幀)屏幕是1920 * 1080,程序有1GB的內存 – Xlsx