2010-08-27 32 views
0

嘿,所有奇怪的問題。我的公司有另一家公司的應用程序,用於記錄通過以太網連接的攝像機拍攝的圖像。他們的應用程序是用C++編寫的,我一直試圖用Java轉換/破解它。在Java中從相機接收圖像時出現文物

我能夠接收圖像,但質量不一樣。在上面的照片是從他們的應用程序,並在底部的照片是從我:

alt text

alt text

任何想法,爲什麼這些文物都出現在我的版本用Java編寫的應用程序的呢?它發生在BMP和JPG圖像上。

它的工作方式就是通過套接字(C++和Java版本)......發送命令來捕獲圖像,並且相機通過發送數據(字節)進行響應。我再救一個字節數組,從他們創造一個新的BufferedImage:

// Create buffered image from bytes 
image = ImageIO.read(new ByteArrayInputStream(imageBytes)); 

感謝您的任何輸入或想法。

回答

1

難道是數據類型問題?什麼是數據格式? (整數,短褲,無符號短?)

+1

嗯...在C++版本的圖像被保存到一個無符號的字符陣列。在Java中,我將它讀入字符串中,當我逐行讀取數據時(爲了檢查相機發送的數據標誌的結束)而連接。在將它讀入字符串之後,我將該字符串轉換爲字節。也許這是問題?實際上可能有很大的意義。 – 2010-08-27 14:20:41

+1

請注意Java字節類型已簽名! – 2010-08-27 14:31:39

+1

原來將其讀入字符串然後做.getBytes()是不一樣的INT讀它由INT成字節[]數組(帶鑄件)。它現在有效!這個答案讓我重新檢查和調查。 – 2010-08-31 19:09:14

1

這看起來像一個調色板的問題,即單個像素的數值保持不變,但該表的值映射到實際的RGB值可能會搞砸了(其實,看具體的畫面,它甚至可能源代碼是BW,你的代碼是彩色的)。我的猜測是,傳輸是而不是的問題。嘗試發送一個已知的字節串來確認,如果你喜歡,但我會進一步專注於圖像編碼。

相關問題