2012-08-31 25 views
3

我正在製作一個16位彙編程序,我工作的圖形模式只支持每個像素寫入單個字節的256種顏色。換句話說,我只能指定一個字節的顏色值來繪製一個像素。我將圖像轉換爲8位深度位圖,現在我試圖用Visual Basic獲取每個像素的顏色值,這樣我就可以在彙編程序中使用這些值,但我得到的是RGB值,當我嘗試將這些RGB值轉換爲單個字節我得到的數字大於256,因此我無法在圖形模式下使用它。以下是我有:如何將與RGB相對應的3個字節轉換爲單個字節?

Dim myBitmap As New Bitmap("images.bmp") 
Dim output As New System.IO.StreamWriter("colors.txt", False) 
Dim pixelColor As Color 
Dim rgb As Integer 

For x As Integer = 1 To myBitmap.Width - 1 Step 1 
      pixelColor = myBitmap.GetPixel(x, y) 
      rgb = CUInt(pixelColor.B) + CUInt((pixelColor.G << 8)) + CUInt((pixelColor.R << 16)) 
      output.WriteLine(rgb.ToString) 

     Next x 

    Next y 
output.Close() 

,實際上是給我的線值大於256越高:

rgb = CUInt(pixelColor.B) + CUInt((pixelColor.G << 8)) + CUInt((pixelColor.R << 16)) 

有任何實際的方法來轉換,合併或完全接近3個RGB值代入一個字節? (不能超過255個)



編輯: 既然我們已經進入VB網的東西讓我寫的代碼工作符合邏輯變換大衛寫道:

rgb = ((pixelColor.R/32) << 5) + ((pixelColor.G/32) << 2) + (pixelColor.B/64) 

謝謝大衛。

回答

5

3位用於紅色值,3位用於綠色,2位用於藍色。在維基百科頁面上有關於8-bit color的解釋很好。

的轉換邏輯是:

[(Red/32) << 5] + [(Green/32) << 2] + (Blue/64) 
+0

這樣一個快速的回答讓我很難堪。過了幾個小時,就是這樣做了。呵呵。謝謝。 :) – NorthStyling

相關問題