簡體   English   中英

檢測BufferedImage是否包含透明像素

[英]Detecting if a BufferedImage contains transparent pixels

我正在嘗試優化Java中的渲染引擎,以不繪制由在其前面繪制的“實體”子對象所遮蓋的對象,即,父對象被其子對象遮擋。

我想知道我從文件加載的任意BufferedImage是否包含任何透明像素-因為這會影響我的遮擋測試。

我發現我可以使用BufferedImage.getColorModel()。hasAlpha()來查找圖像是否支持Alpha,但是如果可以,它不會告訴我它是否絕對包含非透明像素。

我知道我可以遍歷像素數據並測試每個像素的Alpha值並在發現不透明像素后立即返回,但是我想知道是否已經可以使用本機的某個東西,也許是在內部設置的標志? 或強度比遍歷像素少一些的東西。

任何輸入表示贊賞,謝謝。

不幸的是,您必須遍歷每個像素(直到找到透明像素)才能確定。

如果不需要100%確定,則當然可以只測試一些像素,因為您認為這些像素最有可能發生透明度。

通過查看各種圖像,我認為您會發現大多數具有透明部分的圖像在邊緣都包含透明性。 這種優化將在許多常見情況下有所幫助。

不幸的是,我不認為在一種最常見的情況下可以進行優化,即在顏色模型允許透明的情況下進行優化,但是實際上並沒有透明像素……您確實需要測試其中的每個像素這種情況,要確定。

(通過Raster / DataBuffer / SampleModel類)訪問其“本機表示形式”中的alpha值將比使用BufferedImage.getRGB(x, y)並屏蔽掉alpha值更快。

我很確定您需要遍歷每個像素並檢查Alpha值。

我能提供的最佳替代方法是編寫一個自定義方法來讀取像素數據,即您自己的Raster 在此類中,當您將像素數據從源文件讀取到數據緩沖區時,可以隨時檢查Alpha值。 當然,如果您使用內置的圖像閱讀類,這並沒有太大幫助,並且需要付出更多的努力。

暫無
暫無

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

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