.Net speichert die Farbe Color als 4Bytes: ARGB
A ... Alpha Channel (durchsichtigkeit)
R Rot
G Grün
B Blau
Crystal Report erwartet die Farben in BGR (Blau Grün Rot).
Daher muss man den Alpha Teil wegschneiden und R sowie B vertauschen - z.b. in TSQL Scalar Value Funtion:
-- Create date: 09.09.2010
-- Description: Wandelt ARGB (Alpha Channel rgb von .Net Color.ToARGB() hat 4 Byte für RGBA, wobei Rot= 00ffff Grün=ff00ff und blau=ffff00 ist ) in RGB um
-- =============================================
ALTER FUNCTION [dbo].[fnArgb2Bgr]
(
@ARGB as int
)
RETURNS int
AS
BEGIN
DECLARE @BGR as int
DECLARE @R as int = (@ARGB & 0x00FF0000)/0x10000
DECLARE @G as int = (@ARGB & 0x0000FF00) /0x100
DECLARE @B as int = (@ARGB & 0x000000FF)
SET @BGR=@B*0x10000+@G*0x100+@R
--SET @RGB=(((-@ARGB) & 0x00FFffFF) ^ 0xFFffFF)
--SET @RGB=(((-@ARGB) / 256) ^ 16777215) -- shift um 8 bits => schneide niedrigstes byte (alpha channel) weg, dann invertieren der verbleibenden unteren 3 bytes [RGB] (16777215= 0xffFFff)
RETURN @BGR
END
No comments:
Post a Comment