我正在制作一个 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()
实际上给我的值高于 256 的行是:
rgb = CUInt(pixelColor.B) + CUInt((pixelColor.G << 8)) + CUInt((pixelColor.R << 16))
实际上有没有办法将 3 个 RGB 值完全转换、合并或近似为一个字节?(不能超过 255)
编辑:由于我们已经进入了 VB 网络,让我用David写的转换逻辑编写工作代码:
rgb = ((pixelColor.R / 32) << 5) + ((pixelColor.G / 32) << 2) + (pixelColor.B / 64)
谢谢大卫。