2017-04-10 74 views
7

我不是英語母語的人,所以請原諒任何翻譯錯誤。java中的RGB顏色與VB.net

我真的沒有編碼問題。這更多是一個概念性問題。

我寫了兩次相同的一段代碼,將圖像轉換爲RGB值列表。 (每個像素3個值的組合)。

我首先使用寫的代碼在VB.net:

Dim bmp As New Bitmap(File) 
For x As Integer = 0 To w - 1 
    For y As Integer = 0 To h - 1 
     Dim c As Color = bmp.GetPixel(x, y) 
     Dim Red as integer = c.R 
     Dim Green as integer = c.G 
     Dim Blue as integer = c.B 
    Next y 
next x 

後來我寫在Java中如下:

BufferedImage image = ImageIO.read(new File(File)) 
for (int i = 0; i < w; i++) { 
    for (int j = 0; j < h; j++) { 
     int pixel = image.getRGB(i,j); 
     int Red = ((pixel >> 16) & 0xff); 
     int Green = ((pixel >> 8) & 0xff); 
     int Blue = ((pixel) & 0xff); 
    } 
} 

我的預期是從的兩件得到相同的值代碼,因爲他們使用相同的圖像。我在一張照片(270x320)上拍了一張照片(所以顏色很豐富)。令我驚訝的是,我發現VB.net和Java代碼之間的RGB值有微小差異。如果我比較java(紅色)和VB.net(紅色),java(綠色)與VB.net(綠色)和java(藍色)的比較與VB.net(藍色)相比,我比較270x320x3 = 259.2k的組合。從VB.net和Java代碼得到整數之間的區別如下:

  • 沒有區別:250178(96.5%)
  • 一個區別:7426(2.9%)
  • 兩個差:1582(0.6%)
  • 三差:14(0.0%)
  • 四個或更多DIFF:0(0.0%)

誰能給我解釋一下該差分來回回M&它與閱讀顏色的方式,緩衝圖像的方式或類似抗鋸齒的方式有關嗎?

真的很好奇,是什麼原因,提前

+0

它可能是告訴圖像處理庫稍微改變顏色的圖像元數據。可能是一個圖書館讚美元數據,而其他圖書館忽略它。此類元數據的示例包括ICC顏色配置文件,伽馬校正值等。 –

+1

什麼是文件擴展名? –

+1

我試過Jpeg Vs Jpeg和Jpeg與Png –

回答

1

正如其他人所提到THX,所不同的是JPEG的有損壓縮引起的。

您應該以無損格式測試這些方法。