2011-03-03 66 views
0

我想實現一個繪圖工具與圖層的支持。爲每個圖層創建一個WritableRaster。要顯示畫布,必須合併圖層。什麼是最有效的方式來做到這一點?我可以使用bufferedImage,設置柵格並使用alpha組合將每個圖層繪製到Graphics上下文中。但是,在數據層面合併它然後繪製單個圖像是否更好/更快?合併柵格

編輯: 我做了一些分析。這是我目前的做法是什麼樣子:

//tmp.getRaster().setRect(layer.getRaster()); // VERY slow 
tmp.getRaster().setDataElements(0, 0, layer.getRaster()); //slow 
g2.drawImage(tmp, 0, 0, scaledDim.width, scaledDim.height, null); 

我用BufferedImages代替WritableRasters對於之前的每一層,也沒有延遲明顯。

我的下一步是緩存頂層和底層,所以只會繪製3張圖片。這可能會解決問題。

回答

0

我的感覺是繪製柵格大致相當於「在數據級別上合併」。

我不會擔心這件事,除非你注意到它是一個瓶頸。

0

也許你可以使用JAI:

ParameterBlock pb = new ParameterBlock(); 
pb.add(bufImage1); 
pb.add(bufImage2); 
pb.add(.... 
RenderedImage ri = JAI.create("xor",pb); 
0

如果你的blit(畫),他們每個人到圖像緩衝區,你可能正在使用的顯卡加速。如果你通過單獨的緩衝區循環並手動合併它們(我認爲這是你的意思是「在數據層面上執行」),你將使用CPU。

所以實際上,這樣做會比blitting更加慢


因此,您的原始解決方案是最好的。讓圖形卡完成它的工作,它非常好。

0

好的,所以我介紹了一個上層和下層緩存,現在我獲得了相當不錯的性能。我可以添加儘可能多的圖層,因爲我的內存可以處理而不影響渲染時間。