You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET下BGR555颜色转换器开发异常问题求助

BGR555颜色转换函数问题排查与修正

首先明确BGR555的16位结构:高5位为蓝色(B),中间5位为绿色(G),低5位为红色(R),最高位保留为0,最终格式为 0b0BBBBBGGGGGRRRRR。对于#FFFFFF(R=255、G=255、B=255),每个通道取高5位都是31(255 >> 3 = 31),组合后是0b0111111111111111,即十六进制0x7FFF(十进制32767)。

你的函数返回2048(0x0800),说明只有绿色通道的某一位被错误触发,核心问题大概率是通道顺序颠倒、移位位数计算错误或未正确保留通道高5位。

常见错误点及修正方案

  • 通道顺序搞反:误将RGB顺序组合成RGB555而非BGR555,导致蓝色位未被正确设置。
  • 移位位数错误:比如将绿色通道移到了错误的位段(如<<11而非<<5),或蓝色通道移位不足。
  • 未截取高5位:直接使用原始8位通道值,未做>>3操作,导致低位干扰高位。

修正后的VB.NET函数

Function HexToBGR555(hexColor As String) As UInt16
    ' 移除十六进制字符串的#前缀
    hexColor = hexColor.TrimStart("#"c)
    
    ' 解析RGB各通道的8位值
    Dim r As Integer = Convert.ToInt32(hexColor.Substring(0, 2), 16)
    Dim g As Integer = Convert.ToInt32(hexColor.Substring(2, 2), 16)
    Dim b As Integer = Convert.ToInt32(hexColor.Substring(4, 2), 16)
    
    ' 截取每个通道的高5位,并按BGR顺序移位组合
    Dim b5 As Integer = (b >> 3) << 10 ' 蓝色占第10-14位
    Dim g5 As Integer = (g >> 3) << 5  ' 绿色占第5-9位
    Dim r5 As Integer = r >> 3         ' 红色占第0-4位
    
    ' 合并为16位无符号整数返回
    Return CUShort(b5 Or g5 Or r5)
End Function

调用HexToBGR555("#FFFFFF")将返回32767(十六进制0x7FFF),符合预期的大端模式结果。

内容的提问来源于stack exchange,提问作者VMMR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:10:28