簡體   English   中英

提高圖像應用性能

[英]improve image application performance

我有一個Java SE 6應用程序,接收10到15之間的BufferedImage。

該應用必須在共享內存中寫入這些BufferedImage,以便C程序讀取它並顯示圖像。

問題是圖像很大,從1900 * 1600到800 * 600,使用ImageIO進行byte []轉換需要很長時間:最大圖像需要50ms。 我需要此byte []寫入內存,ImageIo是我找到的最快方法。

如果我有4個大圖像,則刷新圖像需要50 * 4 = 200毫秒:(

你有什么想法我可以改善它嗎? 我應該關心1個線程中的1張圖像嗎? 我將有15個線程,而CPU已在60%左右工作

這是我運行的基准測試的反饋:

恢復:似乎ImageIO是圖像處理中最優化的類。

處理:BufferedImage => byte [] => Byte [] => int [] =>寫
注意:使用ImageIO在字節中轉換圖像[]

圖片1900 * 1600
從BufferedImage獲取一個字節[]:45毫秒
轉換byte [] en Byte []:0毫秒
寫入內存:4à9 ms

圖片1280 * 1024
從BufferedImage獲取一個字節[]:20à23 ms
轉換byte [] en Byte []:0毫秒
寫入內存:4à7毫秒

圖片800 * 600
從BufferedImage獲取一個字節[]:9毫秒
轉換byte [] en Byte []:0毫秒
寫在回憶錄中:3à5毫秒

==>線性處理,我們可以得到的最好的

工藝:BufferedImage => int [] =>寫
注意:使用getRGB在int []中轉換圖像

圖像1900 * 1600:2500毫秒

==> getRGB獲取每個圖像像素:必須寫入300萬:太長


處理:BufferedImage => Raster => DataBuffer => write

從BufferedImage獲取數據緩沖區:0毫秒
寫在回憶錄中:2500毫秒

圖像1900 * 1600:2500毫秒

==> DataBuffer的大小為300萬,寫入時間太長

而不是使用imageio寫入圖像。 您是否嘗試過GetPixels()。 imageio將數據寫入特定的編解碼器,例如TIFF / MJPEG。 您需要的是它的實際數據(像素)。 現在,您需要編寫C代碼才能渲染像素。 (您打算如何將數據傳遞給C代碼?指針?)。

暫無
暫無

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

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