如何将对应RGB的3个字节组成一个字节?

Nor*_*ing 3 vb.net assembly

我正在制作一个16位汇编程序,我正在使用的图形模式只支持每个像素256个颜色,这些颜色是用单个字节写的.换句话说,我只能指定一个字节颜色值来绘制像素.我将图像转换为8位深度位图,现在我正在尝试使用Visual Basic获取每个像素颜色值,因此我可以在汇编程序中使用这些值,但我得到一个RGB值,当我尝试转换那些RGB将值转换为单个字节我得到的数字大于256,所以我不能在图形模式下使用它.这是我有的:

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()
Run Code Online (Sandbox Code Playgroud)

实际给出高于256的值的行是:

rgb = CUInt(pixelColor.B) + CUInt((pixelColor.G << 8)) + CUInt((pixelColor.R << 16))
Run Code Online (Sandbox Code Playgroud)

实际上有没有办法将3个RGB值转换,合并或近似为一个字节?(不能超过255)



编辑:既然我们已经进入了VB网络的东西,让我用转换逻辑David编写代码的工作线:

rgb = ((pixelColor.R / 32) << 5) + ((pixelColor.G / 32) << 2) + (pixelColor.B / 64)
Run Code Online (Sandbox Code Playgroud)

谢谢大卫.

Dav*_*rtz 5

使用3位表示红色值,3表示绿色,2表示蓝色.它在维基百科页面上有关8位颜色的解释.

转换逻辑是:

[(Red / 32) << 5] + [(Green / 32) << 2] + (Blue / 64)
Run Code Online (Sandbox Code Playgroud)