@@ -26,6 +26,29 @@ ColorTypes.red(c::RatRGB) = c.r
26
26
ColorTypes. green (c:: RatRGB ) = c. g
27
27
ColorTypes. blue (c:: RatRGB ) = c. b
28
28
29
+ struct RGBA32 <: AbstractRGBA{RGB24, N0f8}
30
+ color:: UInt32
31
+ RGBA32 (c:: UInt32 , :: Type{Val{true}} ) = new (c)
32
+ end
33
+ function RGBA32 (r, g, b, alpha= 1 N0f8)
34
+ u32 = reinterpret (UInt32, ARGB32 (r, g, b, alpha))
35
+ RGBA32 ((u32 << 0x8 ) | (u32 >> 0x18 ), Val{true })
36
+ end
37
+ ColorTypes. red ( c:: RGBA32 ) = reinterpret (N0f8, (c. color >> 0x18 ) % UInt8)
38
+ ColorTypes. green (c:: RGBA32 ) = reinterpret (N0f8, (c. color >> 0x10 ) % UInt8)
39
+ ColorTypes. blue ( c:: RGBA32 ) = reinterpret (N0f8, (c. color >> 0x08 ) % UInt8)
40
+ ColorTypes. alpha (c:: RGBA32 ) = reinterpret (N0f8, c. color % UInt8)
41
+ ColorTypes. comp4 (c:: RGBA32 ) = alpha (c)
42
+
43
+ struct GrayA32 <: AbstractGrayA{Gray24, N0f8}
44
+ color:: UInt32
45
+ GrayA32 (c:: UInt32 , :: Type{Val{true}} ) = new (c)
46
+ end
47
+ GrayA32 (g, alpha= 1 N0f8) = GrayA32 (bswap (reinterpret (UInt32, AGray32 (g, alpha))), Val{true })
48
+ ColorTypes. gray ( c:: GrayA32 ) = reinterpret (N0f8, (c. color >> 0x18 ) % UInt8)
49
+ ColorTypes. alpha (c:: GrayA32 ) = reinterpret (N0f8, c. color % UInt8)
50
+ ColorTypes. comp2 (c:: RGBA32 ) = alpha (c)
51
+
29
52
@testset " Colortypes" begin
30
53
31
54
@testset " convert" begin
@@ -244,7 +267,7 @@ ColorTypes.blue(c::RatRGB) = c.b
244
267
@test - Gray (u) == Gray (- u)
245
268
end
246
269
247
- @testset " Arithmetic with GrayA " begin
270
+ @testset " Arithmetic with TransparentGray " begin
248
271
p1 = GrayA {Float32} (Gray (0.8 ), 0.2 )
249
272
@test @inferred (zero (p1)) === GrayA {Float32} (0 ,0 )
250
273
@test @inferred (oneunit (p1)) === GrayA {Float32} (1 ,1 )
@@ -282,6 +305,13 @@ ColorTypes.blue(c::RatRGB) = c.b
282
305
283
306
# issue #133
284
307
@test AGray32 (1 , 0.4 ) - AGray32 (0.2 , 0.2 ) === AGray32 (0.8 , 0.2 )
308
+
309
+ # issue #146
310
+ @test @inferred (GrayA32 (0.8 ,0.2 )* N0f8 (0.5 )) === GrayA {N0f8} (0.4 ,0.1 )
311
+ @test @inferred (GrayA32 (0.8 ,0.2 )* 0.5 ) === GrayA (0.4 ,0.1 )
312
+ @test @inferred (GrayA32 (0.8 ,0.2 )/ 2 ) === GrayA (0.5f0 * N0f8 (0.8 ),0.5f0 * N0f8 (0.2 ))
313
+ @test @inferred (GrayA32 (0.8 ,0.2 )/ 2.0 ) === GrayA (0.4 ,0.1 )
314
+ @test @inferred (GrayA32 (1 , 0.4 ) - GrayA32 (0.2 , 0.2 )) === GrayA32 (0.8 , 0.2 )
285
315
end
286
316
287
317
@testset " Arithemtic with RGB" begin
@@ -383,7 +413,7 @@ ColorTypes.blue(c::RatRGB) = c.b
383
413
@test String (take! (io)) == " RGBRGB{$Tstr }(\n 0.012N0f8 0.02N0f8 0.031N0f8\n 0.02N0f8 0.039N0f8 0.059N0f8\n 0.031N0f8 0.059N0f8 0.09N0f8$spstr )"
384
414
end
385
415
386
- @testset " Arithemtic with RGBA " begin
416
+ @testset " Arithemtic with TransparentRGB " begin
387
417
cf = RGBA {Float32} (0.1 ,0.2 ,0.3 ,0.4 )
388
418
@test @inferred (zero (cf)) === RGBA {Float32} (0 ,0 ,0 ,0 )
389
419
@test @inferred (oneunit (cf)) === RGBA {Float32} (1 ,1 ,1 ,1 )
@@ -452,6 +482,13 @@ ColorTypes.blue(c::RatRGB) = c.b
452
482
@test ARGB32 (1 ,0 ,0 ,0.8 )/ 2.0 === ARGB (0.5 ,0 ,0 ,0.4 )
453
483
# issue #133
454
484
@test ARGB32 (1 , 0 , 0 , 0.2 ) + ARGB32 (0 , 0 , 1 , 0.2 ) === ARGB32 (1 , 0 , 1 , 0.4 )
485
+
486
+ # issue #146
487
+ @test @inferred (RGBA32 (1 ,0 ,0 ,0.8 )* N0f8 (0.5 )) === RGBA {N0f8} (0.5 ,0 ,0 ,0.4 )
488
+ @test @inferred (RGBA32 (1 ,0 ,0 ,0.8 )* 0.5 ) === RGBA (0.5 ,0 ,0 ,0.4 )
489
+ @test @inferred (RGBA32 (1 ,0 ,0 ,0.8 )/ 2 ) === RGBA (0.5f0 ,0 ,0 ,0.5f0 * N0f8 (0.8 ))
490
+ @test @inferred (RGBA32 (1 ,0 ,0 ,0.8 )/ 2.0 ) === RGBA (0.5 ,0 ,0 ,0.4 )
491
+ @test @inferred (RGBA32 (1 , 0 , 0 , 0.2 ) + RGBA32 (0 , 0 , 1 , 0.2 )) === RGBA32 (1 , 0 , 1 , 0.4 )
455
492
end
456
493
457
494
@testset " Mixed-type arithmetic" begin
@@ -475,7 +512,7 @@ ColorTypes.blue(c::RatRGB) = c.b
475
512
@test rgb ⊗ g == rgb ⊗ RGB (g)
476
513
end
477
514
478
- @testset " Custom RGB arithmetic" begin
515
+ @testset " Custom RGB arithmetic" begin # see also the `RGBA32` cases above
479
516
cf = RatRGB (1 // 10 , 2 // 10 , 3 // 10 )
480
517
@test cf ⋅ cf === (Float64 (red (cf))^ 2 + Float64 (green (cf))^ 2 + Float64 (blue (cf))^ 2 )/ 3
481
518
end
0 commit comments