簡體   English   中英

這個java bitshift有什么作用?

[英]What does this java bitshift do?

我在Rosetta代碼的Hough TransformJava實現中找到了一些移位代碼,除了這部分外,我大致了解了代碼的作用:

rgbValue = (int)(((rgbValue & 0xFF0000) >>> 16) * 0.30 + ((rgbValue & 0xFF00) >>> 8) * 0.59 + (rgbValue & 0xFF) * 0.11);

我認為這需要全部3個像素的平均值,至少是我輸出結果時的樣子。 但這如何工作? 這些魔術數字是什么?

使用此功能的方法,為方便起見而粘貼:

 public static ArrayData getArrayDataFromImage(String filename) throws IOException { BufferedImage inputImage = ImageIO.read(new File(filename)); int width = inputImage.getWidth(); int height = inputImage.getHeight(); int[] rgbData = inputImage.getRGB(0, 0, width, height, null, 0, width); ArrayData arrayData = new ArrayData(width, height); // Flip y axis when reading image for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int rgbValue = rgbData[y * width + x]; // What does this do? rgbValue = (int)(((rgbValue & 0xFF0000) >>> 16) * 0.30 + ((rgbValue & 0xFF00) >>> 8) * 0.59 + (rgbValue & 0xFF) * 0.11); arrayData.set(x, height - 1 - y, rgbValue); } } return arrayData; } 

這是一個24位的RGB值轉換為使用系數的灰度值的特技0.30.59 ,和0.11 (請注意,這些值加起來1 )。

此操作(rgbValue & 0xFF0000) >>> 16切出位17..24,並將它們右移到位置0..7,從而產生一個介於0和255之間(含0和255)的值。 同樣, (rgbValue & 0xFF00) >>> 8切出8..16位,並將它們移到位置0..7。

該問答討論了系數,並討論了其他替代方法。

暫無
暫無

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

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