decode method

  1. @override
Image? decode(
  1. List<int> bytes, {
  2. int? frame,
})
override

Decode a WebP formatted file stored in bytes into an Image. If it's not a valid webp file, null is returned.

Implementation

@override
Image? decode(List<int> bytes, {int? frame}) {
  if (startDecode(bytes) == null) {
    return null;
  }

  if (!_info!.hasAnimation || frame != null) {
    return decodeFrame(frame ?? 0);
  }

  Image? firstImage;
  Image? lastImage;
  for (var i = 0; i < _info!.numFrames; ++i) {
    _info!.frame = i;
    final frame = _info!.frames[i];
    final image = decodeFrame(i);
    if (image == null) {
      continue;
    }

    image.frameDuration = frame.duration;

    if (firstImage == null || lastImage == null) {
      firstImage = Image(
          width: _info!.width,
          height: _info!.height,
          numChannels: image.numChannels,
          format: image.format,
          frameDuration: image.frameDuration);
      lastImage = firstImage;
    } else {
      lastImage = Image.from(lastImage);

      if (frame.clearFrame) {
        lastImage.clear();
      }
    }

    compositeImage(lastImage, image, dstX: frame.x, dstY: frame.y);

    firstImage.addFrame(lastImage);
  }

  return firstImage;
}