@@ -80,7 +80,8 @@ func (p *RGBA) RGBAAt(x, y int) color.RGBA {
80
80
return color.RGBA {}
81
81
}
82
82
i := p .PixOffset (x , y )
83
- return color.RGBA {p .Pix [i + 0 ], p .Pix [i + 1 ], p .Pix [i + 2 ], p .Pix [i + 3 ]}
83
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
84
+ return color.RGBA {s [0 ], s [1 ], s [2 ], s [3 ]}
84
85
}
85
86
86
87
// PixOffset returns the index of the first element of Pix that corresponds to
@@ -95,21 +96,23 @@ func (p *RGBA) Set(x, y int, c color.Color) {
95
96
}
96
97
i := p .PixOffset (x , y )
97
98
c1 := color .RGBAModel .Convert (c ).(color.RGBA )
98
- p .Pix [i + 0 ] = c1 .R
99
- p .Pix [i + 1 ] = c1 .G
100
- p .Pix [i + 2 ] = c1 .B
101
- p .Pix [i + 3 ] = c1 .A
99
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
100
+ s [0 ] = c1 .R
101
+ s [1 ] = c1 .G
102
+ s [2 ] = c1 .B
103
+ s [3 ] = c1 .A
102
104
}
103
105
104
106
func (p * RGBA ) SetRGBA (x , y int , c color.RGBA ) {
105
107
if ! (Point {x , y }.In (p .Rect )) {
106
108
return
107
109
}
108
110
i := p .PixOffset (x , y )
109
- p .Pix [i + 0 ] = c .R
110
- p .Pix [i + 1 ] = c .G
111
- p .Pix [i + 2 ] = c .B
112
- p .Pix [i + 3 ] = c .A
111
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
112
+ s [0 ] = c .R
113
+ s [1 ] = c .G
114
+ s [2 ] = c .B
115
+ s [3 ] = c .A
113
116
}
114
117
115
118
// SubImage returns an image representing the portion of the image p visible
@@ -179,11 +182,12 @@ func (p *RGBA64) RGBA64At(x, y int) color.RGBA64 {
179
182
return color.RGBA64 {}
180
183
}
181
184
i := p .PixOffset (x , y )
185
+ s := p .Pix [i : i + 8 : i + 8 ] // Small cap improves performance, see https://golang.org/issue/27857
182
186
return color.RGBA64 {
183
- uint16 (p . Pix [ i + 0 ])<< 8 | uint16 (p . Pix [ i + 1 ]),
184
- uint16 (p . Pix [ i + 2 ])<< 8 | uint16 (p . Pix [ i + 3 ]),
185
- uint16 (p . Pix [ i + 4 ])<< 8 | uint16 (p . Pix [ i + 5 ]),
186
- uint16 (p . Pix [ i + 6 ])<< 8 | uint16 (p . Pix [ i + 7 ]),
187
+ uint16 (s [ 0 ])<< 8 | uint16 (s [ 1 ]),
188
+ uint16 (s [ 2 ])<< 8 | uint16 (s [ 3 ]),
189
+ uint16 (s [ 4 ])<< 8 | uint16 (s [ 5 ]),
190
+ uint16 (s [ 6 ])<< 8 | uint16 (s [ 7 ]),
187
191
}
188
192
}
189
193
@@ -199,29 +203,31 @@ func (p *RGBA64) Set(x, y int, c color.Color) {
199
203
}
200
204
i := p .PixOffset (x , y )
201
205
c1 := color .RGBA64Model .Convert (c ).(color.RGBA64 )
202
- p .Pix [i + 0 ] = uint8 (c1 .R >> 8 )
203
- p .Pix [i + 1 ] = uint8 (c1 .R )
204
- p .Pix [i + 2 ] = uint8 (c1 .G >> 8 )
205
- p .Pix [i + 3 ] = uint8 (c1 .G )
206
- p .Pix [i + 4 ] = uint8 (c1 .B >> 8 )
207
- p .Pix [i + 5 ] = uint8 (c1 .B )
208
- p .Pix [i + 6 ] = uint8 (c1 .A >> 8 )
209
- p .Pix [i + 7 ] = uint8 (c1 .A )
206
+ s := p .Pix [i : i + 8 : i + 8 ] // Small cap improves performance, see https://golang.org/issue/27857
207
+ s [0 ] = uint8 (c1 .R >> 8 )
208
+ s [1 ] = uint8 (c1 .R )
209
+ s [2 ] = uint8 (c1 .G >> 8 )
210
+ s [3 ] = uint8 (c1 .G )
211
+ s [4 ] = uint8 (c1 .B >> 8 )
212
+ s [5 ] = uint8 (c1 .B )
213
+ s [6 ] = uint8 (c1 .A >> 8 )
214
+ s [7 ] = uint8 (c1 .A )
210
215
}
211
216
212
217
func (p * RGBA64 ) SetRGBA64 (x , y int , c color.RGBA64 ) {
213
218
if ! (Point {x , y }.In (p .Rect )) {
214
219
return
215
220
}
216
221
i := p .PixOffset (x , y )
217
- p .Pix [i + 0 ] = uint8 (c .R >> 8 )
218
- p .Pix [i + 1 ] = uint8 (c .R )
219
- p .Pix [i + 2 ] = uint8 (c .G >> 8 )
220
- p .Pix [i + 3 ] = uint8 (c .G )
221
- p .Pix [i + 4 ] = uint8 (c .B >> 8 )
222
- p .Pix [i + 5 ] = uint8 (c .B )
223
- p .Pix [i + 6 ] = uint8 (c .A >> 8 )
224
- p .Pix [i + 7 ] = uint8 (c .A )
222
+ s := p .Pix [i : i + 8 : i + 8 ] // Small cap improves performance, see https://golang.org/issue/27857
223
+ s [0 ] = uint8 (c .R >> 8 )
224
+ s [1 ] = uint8 (c .R )
225
+ s [2 ] = uint8 (c .G >> 8 )
226
+ s [3 ] = uint8 (c .G )
227
+ s [4 ] = uint8 (c .B >> 8 )
228
+ s [5 ] = uint8 (c .B )
229
+ s [6 ] = uint8 (c .A >> 8 )
230
+ s [7 ] = uint8 (c .A )
225
231
}
226
232
227
233
// SubImage returns an image representing the portion of the image p visible
@@ -291,7 +297,8 @@ func (p *NRGBA) NRGBAAt(x, y int) color.NRGBA {
291
297
return color.NRGBA {}
292
298
}
293
299
i := p .PixOffset (x , y )
294
- return color.NRGBA {p .Pix [i + 0 ], p .Pix [i + 1 ], p .Pix [i + 2 ], p .Pix [i + 3 ]}
300
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
301
+ return color.NRGBA {s [0 ], s [1 ], s [2 ], s [3 ]}
295
302
}
296
303
297
304
// PixOffset returns the index of the first element of Pix that corresponds to
@@ -306,21 +313,23 @@ func (p *NRGBA) Set(x, y int, c color.Color) {
306
313
}
307
314
i := p .PixOffset (x , y )
308
315
c1 := color .NRGBAModel .Convert (c ).(color.NRGBA )
309
- p .Pix [i + 0 ] = c1 .R
310
- p .Pix [i + 1 ] = c1 .G
311
- p .Pix [i + 2 ] = c1 .B
312
- p .Pix [i + 3 ] = c1 .A
316
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
317
+ s [0 ] = c1 .R
318
+ s [1 ] = c1 .G
319
+ s [2 ] = c1 .B
320
+ s [3 ] = c1 .A
313
321
}
314
322
315
323
func (p * NRGBA ) SetNRGBA (x , y int , c color.NRGBA ) {
316
324
if ! (Point {x , y }.In (p .Rect )) {
317
325
return
318
326
}
319
327
i := p .PixOffset (x , y )
320
- p .Pix [i + 0 ] = c .R
321
- p .Pix [i + 1 ] = c .G
322
- p .Pix [i + 2 ] = c .B
323
- p .Pix [i + 3 ] = c .A
328
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
329
+ s [0 ] = c .R
330
+ s [1 ] = c .G
331
+ s [2 ] = c .B
332
+ s [3 ] = c .A
324
333
}
325
334
326
335
// SubImage returns an image representing the portion of the image p visible
@@ -390,11 +399,12 @@ func (p *NRGBA64) NRGBA64At(x, y int) color.NRGBA64 {
390
399
return color.NRGBA64 {}
391
400
}
392
401
i := p .PixOffset (x , y )
402
+ s := p .Pix [i : i + 8 : i + 8 ] // Small cap improves performance, see https://golang.org/issue/27857
393
403
return color.NRGBA64 {
394
- uint16 (p . Pix [ i + 0 ])<< 8 | uint16 (p . Pix [ i + 1 ]),
395
- uint16 (p . Pix [ i + 2 ])<< 8 | uint16 (p . Pix [ i + 3 ]),
396
- uint16 (p . Pix [ i + 4 ])<< 8 | uint16 (p . Pix [ i + 5 ]),
397
- uint16 (p . Pix [ i + 6 ])<< 8 | uint16 (p . Pix [ i + 7 ]),
404
+ uint16 (s [ 0 ])<< 8 | uint16 (s [ 1 ]),
405
+ uint16 (s [ 2 ])<< 8 | uint16 (s [ 3 ]),
406
+ uint16 (s [ 4 ])<< 8 | uint16 (s [ 5 ]),
407
+ uint16 (s [ 6 ])<< 8 | uint16 (s [ 7 ]),
398
408
}
399
409
}
400
410
@@ -410,29 +420,31 @@ func (p *NRGBA64) Set(x, y int, c color.Color) {
410
420
}
411
421
i := p .PixOffset (x , y )
412
422
c1 := color .NRGBA64Model .Convert (c ).(color.NRGBA64 )
413
- p .Pix [i + 0 ] = uint8 (c1 .R >> 8 )
414
- p .Pix [i + 1 ] = uint8 (c1 .R )
415
- p .Pix [i + 2 ] = uint8 (c1 .G >> 8 )
416
- p .Pix [i + 3 ] = uint8 (c1 .G )
417
- p .Pix [i + 4 ] = uint8 (c1 .B >> 8 )
418
- p .Pix [i + 5 ] = uint8 (c1 .B )
419
- p .Pix [i + 6 ] = uint8 (c1 .A >> 8 )
420
- p .Pix [i + 7 ] = uint8 (c1 .A )
423
+ s := p .Pix [i : i + 8 : i + 8 ] // Small cap improves performance, see https://golang.org/issue/27857
424
+ s [0 ] = uint8 (c1 .R >> 8 )
425
+ s [1 ] = uint8 (c1 .R )
426
+ s [2 ] = uint8 (c1 .G >> 8 )
427
+ s [3 ] = uint8 (c1 .G )
428
+ s [4 ] = uint8 (c1 .B >> 8 )
429
+ s [5 ] = uint8 (c1 .B )
430
+ s [6 ] = uint8 (c1 .A >> 8 )
431
+ s [7 ] = uint8 (c1 .A )
421
432
}
422
433
423
434
func (p * NRGBA64 ) SetNRGBA64 (x , y int , c color.NRGBA64 ) {
424
435
if ! (Point {x , y }.In (p .Rect )) {
425
436
return
426
437
}
427
438
i := p .PixOffset (x , y )
428
- p .Pix [i + 0 ] = uint8 (c .R >> 8 )
429
- p .Pix [i + 1 ] = uint8 (c .R )
430
- p .Pix [i + 2 ] = uint8 (c .G >> 8 )
431
- p .Pix [i + 3 ] = uint8 (c .G )
432
- p .Pix [i + 4 ] = uint8 (c .B >> 8 )
433
- p .Pix [i + 5 ] = uint8 (c .B )
434
- p .Pix [i + 6 ] = uint8 (c .A >> 8 )
435
- p .Pix [i + 7 ] = uint8 (c .A )
439
+ s := p .Pix [i : i + 8 : i + 8 ] // Small cap improves performance, see https://golang.org/issue/27857
440
+ s [0 ] = uint8 (c .R >> 8 )
441
+ s [1 ] = uint8 (c .R )
442
+ s [2 ] = uint8 (c .G >> 8 )
443
+ s [3 ] = uint8 (c .G )
444
+ s [4 ] = uint8 (c .B >> 8 )
445
+ s [5 ] = uint8 (c .B )
446
+ s [6 ] = uint8 (c .A >> 8 )
447
+ s [7 ] = uint8 (c .A )
436
448
}
437
449
438
450
// SubImage returns an image representing the portion of the image p visible
@@ -850,7 +862,8 @@ func (p *CMYK) CMYKAt(x, y int) color.CMYK {
850
862
return color.CMYK {}
851
863
}
852
864
i := p .PixOffset (x , y )
853
- return color.CMYK {p .Pix [i + 0 ], p .Pix [i + 1 ], p .Pix [i + 2 ], p .Pix [i + 3 ]}
865
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
866
+ return color.CMYK {s [0 ], s [1 ], s [2 ], s [3 ]}
854
867
}
855
868
856
869
// PixOffset returns the index of the first element of Pix that corresponds to
@@ -865,21 +878,23 @@ func (p *CMYK) Set(x, y int, c color.Color) {
865
878
}
866
879
i := p .PixOffset (x , y )
867
880
c1 := color .CMYKModel .Convert (c ).(color.CMYK )
868
- p .Pix [i + 0 ] = c1 .C
869
- p .Pix [i + 1 ] = c1 .M
870
- p .Pix [i + 2 ] = c1 .Y
871
- p .Pix [i + 3 ] = c1 .K
881
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
882
+ s [0 ] = c1 .C
883
+ s [1 ] = c1 .M
884
+ s [2 ] = c1 .Y
885
+ s [3 ] = c1 .K
872
886
}
873
887
874
888
func (p * CMYK ) SetCMYK (x , y int , c color.CMYK ) {
875
889
if ! (Point {x , y }.In (p .Rect )) {
876
890
return
877
891
}
878
892
i := p .PixOffset (x , y )
879
- p .Pix [i + 0 ] = c .C
880
- p .Pix [i + 1 ] = c .M
881
- p .Pix [i + 2 ] = c .Y
882
- p .Pix [i + 3 ] = c .K
893
+ s := p .Pix [i : i + 4 : i + 4 ] // Small cap improves performance, see https://golang.org/issue/27857
894
+ s [0 ] = c .C
895
+ s [1 ] = c .M
896
+ s [2 ] = c .Y
897
+ s [3 ] = c .K
883
898
}
884
899
885
900
// SubImage returns an image representing the portion of the image p visible
0 commit comments