我需要在SSRS 2008r2报告中显示一些数据,并且颜色必须与将其颜色保存为整数的Windows VB应用程序相匹配(例如16744703是粉红色)。我相信这是ARGB格式。我不关心alpha值,因为应用程序不允许用户修改它
我一直在使用SQL将ARGB转换为SSRS中兼容的东西。我需要在SQL中进行转换,因为还有其他因素可能会覆盖对象颜色。
我可以使用3 int的rgb或十六进制值
有人知道怎么做吗?
问候
标记
想明白了。下面是一个返回RGB()或Hex 的函数
-- Description: Converts ARGB to RGB(RR,GG,BB)
-- e.g. 16744703 returns RGB(255,128,255) or #FF80FF
CREATE FUNCTION [dbo].[ARGB2RGB]
(
@ARGB AS BIGINT
,@ColorType AS VARCHAR(1) -- 'H' = Hex, 'R' = RGB
)
RETURNS VARCHAR(16)
AS
BEGIN
DECLARE @Octet1 TINYINT
DECLARE @Octet2 TINYINT
DECLARE @Octet3 TINYINT
DECLARE @Octet4 TINYINT
DECLARE @RestOfColor BIGINT
SET @Octet1 = @ARGB / 16777216
SET @RestOfColor = @ARGB - ( @Octet1 * CAST(16777216 AS BIGINT) )
SET @Octet2 = @RestOfColor / 65536
SET @RestOfColor = @RestOfColor - ( @Octet2 * 65536 )
SET @Octet3 = @RestOfColor / 256
SET @Octet4 = @RestOfColor - ( @Octet3 * 256 )
RETURN
CASE @ColorType
WHEN 'R'
THEN 'RGB(' + CONVERT(VARCHAR, @Octet4) + ','
+ CONVERT(VARCHAR, @Octet3) + ',' + CONVERT(VARCHAR, @Octet2)
+ ')'
WHEN 'H'
THEN '#' + RIGHT(sys.fn_varbintohexstr(@Octet4), 2)
+ RIGHT(sys.fn_varbintohexstr(@Octet3), 2)
+ RIGHT(sys.fn_varbintohexstr(@Octet2), 2)
END
END
希望其他人发现它有用
问候
标记
create FUNCTION [dbo].[ConvertRGB]
(
@ARGB AS float
)
RETURNS @ReturnValue TABLE ( R TINYINT,B TINYINT, G TINYINT )
as
BEGIN
DECLARE @testvarbinary binary(4)
DECLARE @strRBG nvarchar(MAX)
set @testvarbinary = CONVERT(binary(4),@ARGB)
set @strRBG=( SELECT substring(sys.fn_varbintohexstr(@testvarbinary),5,6))
DECLARE @temp AS TABLE (hex char(6))
INSERT INTO @temp
VALUES (@strRBG)
DECLARE @strHex AS varchar(16)
SET @strHex = '0123456789abcdef' -- Assuming case-insensitive collation!
INSERT INTO @ReturnValue
( R,G,B )
SELECT 16 * (CHARINDEX(SUBSTRING(hex, 1, 1), @strHex) - 1) + (CHARINDEX(SUBSTRING(hex, 2, 1), @strHex) - 1)
,16 * (CHARINDEX(SUBSTRING(hex, 3, 1), @strHex) - 1) + (CHARINDEX(SUBSTRING(hex, 4, 1), @strHex) - 1)
,16 * (CHARINDEX(SUBSTRING(hex, 5, 1), @strHex) - 1) + (CHARINDEX(SUBSTRING(hex, 6, 1), @strHex) - 1)
FROM @temp
RETURN
END;
GO
--select * from [ConvertRGB](10592513)
我本来想做这样的事情,所以写了这篇文章。这是一个很大的帮助,但我发现它更具吸引力的内联如下请注意,结果可以在SSRS颜色表达式中使用,无需额外转换
select CustomerID
,SSRSColor = '#' + SUBSTRING(S.TXTHEXColor, 5, 2)
+ SUBSTRING(S.TXTHEXColor, 3, 2)
+ SUBSTRING(S.TXTHEXColor, 1, 2)
from
(
Select CustomerID
,[TXTHEXColor] = right(sys.fn_varbintohexstr(CONVERT(varbinary, T.Color)), 6)
From SomeTable T
) S
如果仍然需要一个函数,那么下面的方法要短得多,但请记住,对于大的记录集,函数会大大减慢过程。
CREATE FUNCTION [dbo].[SSRSColor] (
@ARGB AS INT
)
RETURNS VARCHAR(7)
AS
BEGIN
DECLARE @TXTHEXColor varchar(100)
Select @TXTHEXColor = right(sys.fn_varbintohexstr(CONVERT(varbinary, @ARGB)), 6)
return '#' + SUBSTRING(@TXTHEXColor, 5, 2) + SUBSTRING(@TXTHEXColor, 3, 2) + SUBSTRING(@TXTHEXColor, 1, 2)
END