0

SQL Server 2012中,您如何将由int(存储为 0xBBGGRR)表示的颜色转换为格式为的字符串R=123, G=234, B=12?我们将忽略 alpha 部分。

例如,给定一个整数 value 0xff223344,你会得到R=68, G=51, B=34

4

3 回答 3

2

使用按位和 (&) 运算符:

declare @i int
set @i=0xff223344

select 
  'R=' +   cast(@i & 0xFF as varchar(3)) +
  ', G=' + cast((@i & 0xFF00) / 0x100 as varchar(3)) +
  ', B=' + cast((@i & 0xFF0000) / 0x10000 as varchar(3)) 
于 2013-11-01T14:21:33.720 回答
1

那么这样的解决方案呢?

declare @i int = 0x223344

select 'R=' + cast (@i % 256 as varchar)
    + ', G=' + cast (@i / 256 % 256 as varchar)
    + ', B=' + cast (@i / 65536 % 256 as varchar)

或者,如果您有一个fffor alpha 通道:

declare @i int = 0xff443322

if @i < 0
    set @i = @i % cast(0x1000000 as int) - cast(0xff000000 as int)

select 'R=' + cast (@i % 256 as varchar)
    + ', G=' + cast (@i / 256 % 256 as varchar)
    + ', B=' + cast (@i / 65536 % 256 as varchar)
于 2013-11-01T11:40:22.213 回答
1
Declare @i int
Set @i=0xff223344
select 
  'R=' + Cast(Cast(SubString(CAST(@i as BINARY(4)),4,1) as int) as Varchar(3))
+ ', G=' + Cast(Cast(SubString(CAST(@i as BINARY(4)),3,1) as int) as Varchar(3))
+ ', B=' + Cast(Cast(SubString(CAST(@i as BINARY(4)),2,1) as int) as Varchar(3))
于 2013-11-01T11:38:51.577 回答