decodeResourceImage function
Checks dimensions before allocating decoded image pixels.
Implementation
Future<ui.Image> decodeResourceImage(
Uint8List bytes, {
int maxPixels = 16777216,
}) async {
final buffer = await ui.ImmutableBuffer.fromUint8List(bytes);
try {
final descriptor = await ui.ImageDescriptor.encoded(buffer);
try {
if (descriptor.width * descriptor.height > maxPixels) {
throw StateError('Image exceeds $maxPixels pixels');
}
final codec = await descriptor.instantiateCodec();
try {
return (await codec.getNextFrame()).image;
} finally {
codec.dispose();
}
} finally {
descriptor.dispose();
}
} finally {
buffer.dispose();
}
}