clear method
Set all of the pixels to the Color c
, or all values to 0 if c
is not
given.
Implementation
@override
void clear([Color? c]) {
final c8 = c?.convert(format: Format.uint8);
if (numChannels == 1) {
final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
data.fillRange(0, data.length, ri);
} else if (numChannels == 2) {
final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
final gi = c8 == null ? 0 : (c8.g as int).clamp(0, 255);
final rg = (gi << 8) | ri;
final u16 = Uint16List.view(data.buffer);
u16.fillRange(0, u16.length, rg);
} else if (numChannels == 4) {
final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
final gi = c8 == null ? 0 : (c8.g as int).clamp(0, 255);
final bi = c8 == null ? 0 : (c8.b as int).clamp(0, 255);
final ai = c8 == null ? 0 : (c8.a as int).clamp(0, 255);
final rgba = (ai << 24) | (bi << 16) | (gi << 8) | ri;
final u32 = Uint32List.view(data.buffer);
u32.fillRange(0, u32.length, rgba);
} else {
final ri = c8 == null ? 0 : (c8.r as int).clamp(0, 255);
final gi = c8 == null ? 0 : (c8.g as int).clamp(0, 255);
final bi = c8 == null ? 0 : (c8.b as int).clamp(0, 255);
// rgb is the slow case since we can't pack the channels
for (final p in this) {
p
..r = ri
..g = gi
..b = bi;
}
}
}