2012-08-31 3 views
3

저는 16 비트 어셈블리 프로그램을 만들고 있고, 작동중인 그래픽 모드는 1 바이트로 작성된 픽셀 당 256 색만 지원합니다. 즉, 픽셀을 그리는 데 1 바이트 색상 값만 지정할 수 있습니다. 이미지를 8 비트 심도의 비트 맵으로 변환 했으므로 Visual Basic에서 각 픽셀 색 값을 가져 와서 어셈블리 프로그램에서이 값을 사용할 수있게되었지만 RGB 값을 얻었고 RGB를 변환하려고 시도했습니다. 값을 1 바이트로 변환합니다. 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 값에 근접 할 수있는 방법이 있나요 여기에 내가 무엇을 가지고 1 바이트? (초과 할 수 없습니다 255)



편집 : 우리가 이미 VB 순 물건에있는 나를 데이비드 쓴 변환 로직과 코드의 작업 라인을 쓸 수 있기 때문에 :

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

감사합니다. David.

답변

5

빨간색 값은 3 비트, 녹색 값은 3 비트, 파란색 값은 2 비트를 사용하십시오. 위키 백과 페이지의 내용은 8-bit color입니다.

변환 논리는 다음과 같습니다

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

이러한 신속한 답변이 나를 나쁘게 보이게한다. 이것에 시간이 흘렀고 그것이 어떻게 이루어 졌는지입니다. Hehe. 감사. :) – NorthStyling

관련 문제