decodeResourceImage function

Future<Image> decodeResourceImage(
  1. Uint8List bytes, {
  2. int maxPixels = 16777216,
})

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();
  }
}