44import net .imglib2 .Point ;
55import net .imglib2 .RandomAccess ;
66import net .imglib2 .RandomAccessibleInterval ;
7+ import net .imglib2 .type .numeric .ARGBType ;
78import net .imglib2 .type .numeric .real .DoubleType ;
89import org .junit .jupiter .api .Assertions ;
910import org .junit .jupiter .api .Test ;
@@ -13,36 +14,36 @@ public class TestAccessibleScaler {
1314 @ Test
1415 void Check_Min_Different_From_Zero () {
1516 double scale = 2 ;
16- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new long [] {0 , 3 , 0 });
17+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new long [] {0 , 3 , 0 });
1718
1819 Assertions .assertThrows (IllegalArgumentException .class , () -> AccessibleScaler .scaleWithLinearInterpolation (accessible , scale ));
1920 }
2021
2122 @ Test
2223 void Check_Negative_Scale () {
2324 double scale = -2 ;
24- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible ();
25+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible ();
2526
2627 Assertions .assertThrows (IllegalArgumentException .class , () -> AccessibleScaler .scaleWithLinearInterpolation (accessible , scale ));
2728 }
2829
2930 @ Test
3031 void Check_Less_Than_Two_Dimensions () {
3132 double scale = 2 ;
32- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new long [] {0 });
33+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new long [] {0 });
3334
3435 Assertions .assertThrows (IllegalArgumentException .class , () -> AccessibleScaler .scaleWithLinearInterpolation (accessible , scale ));
3536 }
3637
3738 @ Test
38- void Check_Linear_Interpolation_Scale_With_2_by_4_Array () {
39- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new double [][] {
39+ void Check_Linear_Interpolation_Scale_With_2_by_4_Double_Array () {
40+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new double [][] {
4041 new double [] {0.80 , 0.97 , 0.40 , 0.99 },
4142 new double [] {0.95 , 0.22 , 0.63 , 0.25 }
4243 });
4344 double scale = 0.5 ;
4445 double [][] expectedPixels = new double [][] {
45- new double [] {0.735 , 0.5675 }
46+ new double [] {( 0.80 + 0.97 + 0.95 + 0.22 ) / 4 , ( 0.40 + 0.99 + 0.63 + 0.25 ) / 4 }
4647 };
4748
4849 RandomAccessibleInterval <DoubleType > scaledAccessible = AccessibleScaler .scaleWithLinearInterpolation (accessible , scale );
@@ -51,13 +52,13 @@ void Check_Linear_Interpolation_Scale_With_2_by_4_Array() {
5152 }
5253
5354 @ Test
54- void Check_Linear_Interpolation_Scale_With_1_by_3_Array () {
55- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new double [][] {
55+ void Check_Linear_Interpolation_Scale_With_1_by_3_Double_Array () {
56+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new double [][] {
5657 new double [] {0.26 , 0.66 , 0.34 }
5758 });
5859 double scale = 0.5 ;
5960 double [][] expectedPixels = new double [][] {
60- new double [] {0.46 }
61+ new double [] {( 0.26 + 0.66 ) / 2 }
6162 };
6263
6364 RandomAccessibleInterval <DoubleType > scaledAccessible = AccessibleScaler .scaleWithLinearInterpolation (accessible , scale );
@@ -66,8 +67,8 @@ void Check_Linear_Interpolation_Scale_With_1_by_3_Array() {
6667 }
6768
6869 @ Test
69- void Check_Linear_Interpolation_Interpolation_Scale_With_5_by_5_Array () {
70- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new double [][] {
70+ void Check_Linear_Interpolation_Interpolation_Scale_With_5_by_5_Double_Array () {
71+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new double [][] {
7172 new double [] {0.80 , 0.72 , 0.48 , 0.27 , 0.68 },
7273 new double [] {0.41 , 0.21 , 0.60 , 0.47 , 0.86 },
7374 new double [] {0.94 , 0.32 , 0.55 , 0.22 , 0.46 },
@@ -76,18 +77,37 @@ void Check_Linear_Interpolation_Interpolation_Scale_With_5_by_5_Array() {
7677 });
7778 double scale = 0.5 ;
7879 double [][] expectedPixels = new double [][] {
79- new double [] {0.535 , 0.455 },
80- new double [] {0.63 , 0.4825 }
80+ new double [] {( 0.80 + 0.72 + 0.41 + 0.21 ) / 4 , ( 0.48 + 0.27 + 0.60 + 0.47 ) / 4 },
81+ new double [] {( 0.94 + 0.32 + 0.43 + 0.83 ) / 4 , ( 0.55 + 0.22 + 0.49 + 0.67 ) / 4 }
8182 };
8283
8384 RandomAccessibleInterval <DoubleType > scaledAccessible = AccessibleScaler .scaleWithLinearInterpolation (accessible , scale );
8485
8586 Utils .assertRandomAccessibleEquals (scaledAccessible , expectedPixels );
8687 }
8788
89+ @ Test
90+ void Check_Linear_Interpolation_Scale_With_2_by_4_Argb_Array () {
91+ RandomAccessibleInterval <ARGBType > accessible = new SampleArgbAccessible (new int [][] {
92+ new int [] {ARGBType .rgba (82 , 79 , 61 , 46 ), ARGBType .rgba (67 , 94 , 89 , 62 ), ARGBType .rgba (13 , 33 , 3 , 42 ), ARGBType .rgba (92 , 41 , 35 , 54 )},
93+ new int [] {ARGBType .rgba (32 , 64 , 90 , 99 ), ARGBType .rgba (58 , 55 , 73 , 84 ), ARGBType .rgba (81 , 63 , 45 , 11 ), ARGBType .rgba (22 , 24 , 37 , 34 )}
94+ });
95+ double scale = 0.5 ;
96+ int [][] expectedPixels = new int [][] {
97+ new int [] {
98+ ARGBType .rgba (Math .round ((82 + 67 + 32 + 58 ) / 4. ), Math .round ((79 + 94 + 64 + 55 ) / 4. ), Math .round ((61 + 89 + 90 + 73 ) / 4. ), Math .round ((46 + 62 + 99 + 84 ) / 4. )),
99+ ARGBType .rgba (Math .round ((13 + 92 + 22 + 81 ) / 4. ), Math .round ((33 + 41 + 24 + 63 ) / 4. ), Math .round ((3 + 35 + 37 + 45 ) / 4. ), Math .round ((42 + 54 + 34 + 11 ) / 4. ))
100+ }
101+ };
102+
103+ RandomAccessibleInterval <ARGBType > scaledAccessible = AccessibleScaler .scaleWithLinearInterpolation (accessible , scale );
104+
105+ Utils .assertArgbRandomAccessibleEquals (scaledAccessible , expectedPixels );
106+ }
107+
88108 @ Test
89109 void Check_Nearest_Neighbor_Interpolation_Scale_With_2_by_4_Array () {
90- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new double [][] {
110+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new double [][] {
91111 new double [] {0.80 , 0.97 , 0.40 , 0.99 },
92112 new double [] {0.95 , 0.22 , 0.63 , 0.25 }
93113 });
@@ -103,7 +123,7 @@ void Check_Nearest_Neighbor_Interpolation_Scale_With_2_by_4_Array() {
103123
104124 @ Test
105125 void Check_Nearest_Neighbor_Interpolation_Scale_With_1_by_3_Array () {
106- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new double [][] {
126+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new double [][] {
107127 new double [] {0.26 , 0.66 , 0.34 }
108128 });
109129 double scale = 0.5 ;
@@ -118,7 +138,7 @@ void Check_Nearest_Neighbor_Interpolation_Scale_With_1_by_3_Array() {
118138
119139 @ Test
120140 void Check_Nearest_Neighbor_Interpolation_Scale_With_5_by_5_Array () {
121- RandomAccessibleInterval <DoubleType > accessible = new SampleAccessible (new double [][] {
141+ RandomAccessibleInterval <DoubleType > accessible = new SampleDoubleAccessible (new double [][] {
122142 new double [] {0.80 , 0.72 , 0.48 , 0.27 , 0.68 },
123143 new double [] {0.41 , 0.21 , 0.60 , 0.47 , 0.86 },
124144 new double [] {0.94 , 0.32 , 0.55 , 0.22 , 0.46 },
@@ -136,27 +156,27 @@ void Check_Nearest_Neighbor_Interpolation_Scale_With_5_by_5_Array() {
136156 Utils .assertRandomAccessibleEquals (scaledAccessible , expectedPixels );
137157 }
138158
139- private static class SampleAccessible implements RandomAccessibleInterval <DoubleType > {
159+ private static class SampleDoubleAccessible implements RandomAccessibleInterval <DoubleType > {
140160
141161 private final long [] min ;
142162 private final long [] max ;
143163 private final double [][] values ;
144164
145- public SampleAccessible () {
165+ public SampleDoubleAccessible () {
146166 this (new long [] {0 , 0 });
147167 }
148168
149- public SampleAccessible (double [][] values ) {
169+ public SampleDoubleAccessible (double [][] values ) {
150170 this (new long [] {0 , 0 }, values );
151171 }
152172
153- public SampleAccessible (long [] min ) {
173+ public SampleDoubleAccessible (long [] min ) {
154174 this (min , new double [][] {
155175 new double [] {}
156176 });
157177 }
158178
159- private SampleAccessible (long [] min , double [][] values ) {
179+ private SampleDoubleAccessible (long [] min , double [][] values ) {
160180 this .min = min ;
161181 this .max = new long [] {values .length - 1 , values [0 ].length - 1 };
162182 this .values = values ;
@@ -174,7 +194,7 @@ public long max(int d) {
174194
175195 @ Override
176196 public RandomAccess <DoubleType > randomAccess () {
177- return new SampleAccess (values );
197+ return new SampleDoubleAccess (values );
178198 }
179199
180200 @ Override
@@ -188,12 +208,12 @@ public int numDimensions() {
188208 }
189209 }
190210
191- private static class SampleAccess extends Point implements RandomAccess <DoubleType > {
211+ private static class SampleDoubleAccess extends Point implements RandomAccess <DoubleType > {
192212
193213 private final DoubleType value = new DoubleType ();
194214 private final double [][] values ;
195215
196- public SampleAccess (double [][] values ) {
216+ public SampleDoubleAccess (double [][] values ) {
197217 super (2 );
198218
199219 this .values = values ;
@@ -207,7 +227,67 @@ public DoubleType get() {
207227
208228 @ Override
209229 public RandomAccess <DoubleType > copy () {
210- return new SampleAccess (values );
230+ return new SampleDoubleAccess (values );
231+ }
232+ }
233+
234+ private static class SampleArgbAccessible implements RandomAccessibleInterval <ARGBType > {
235+
236+ private final long [] min = new long [] {0 , 0 };
237+ private final long [] max ;
238+ private final int [][] values ;
239+
240+ public SampleArgbAccessible (int [][] values ) {
241+ this .max = new long [] {values .length - 1 , values [0 ].length - 1 };
242+ this .values = values ;
243+ }
244+
245+ @ Override
246+ public long min (int d ) {
247+ return min [d ];
248+ }
249+
250+ @ Override
251+ public long max (int d ) {
252+ return max [d ];
253+ }
254+
255+ @ Override
256+ public RandomAccess <ARGBType > randomAccess () {
257+ return new SampleArgbAccess (values );
258+ }
259+
260+ @ Override
261+ public RandomAccess <ARGBType > randomAccess (Interval interval ) {
262+ return randomAccess ();
263+ }
264+
265+ @ Override
266+ public int numDimensions () {
267+ return min .length ;
268+ }
269+ }
270+
271+ private static class SampleArgbAccess extends Point implements RandomAccess <ARGBType > {
272+
273+ private final ARGBType value = new ARGBType ();
274+ private final int [][] values ;
275+
276+ public SampleArgbAccess (int [][] values ) {
277+ super (2 );
278+
279+ this .values = values ;
280+ }
281+
282+ @ Override
283+ public ARGBType get () {
284+ value .set (values [(int ) position [0 ]][(int ) position [1 ]]);
285+ return value ;
286+ }
287+
288+ @ Override
289+ public RandomAccess <ARGBType > copy () {
290+ return new SampleArgbAccess (values );
211291 }
212292 }
213293}
0 commit comments