getBytes method

Uint8List getBytes({
  1. ChannelOrder? order,
  2. bool inPlace = false,
})

Similar to toUint8List, but will convert the channels of the image pixels to the given order. If that happens, the returned bytes will be a copy and not a direct view of the image data.

Implementation

Uint8List getBytes({ChannelOrder? order, bool inPlace = false}) {
  if (order == null) {
    return toUint8List();
  }

  if (numChannels == 4) {
    if (order == ChannelOrder.abgr ||
        order == ChannelOrder.argb ||
        order == ChannelOrder.bgra) {
      final tempImage = inPlace ? this : clone();
      if (order == ChannelOrder.abgr) {
        for (final p in tempImage) {
          final r = p.r;
          final g = p.g;
          final b = p.b;
          final a = p.a;
          p
            ..r = a
            ..g = b
            ..b = g
            ..a = r;
        }
      } else if (order == ChannelOrder.argb) {
        for (final p in tempImage) {
          final r = p.r;
          final g = p.g;
          final b = p.b;
          final a = p.a;
          p
            ..r = a
            ..g = r
            ..b = g
            ..a = b;
        }
      } else if (order == ChannelOrder.bgra) {
        for (final p in tempImage) {
          final r = p.r;
          final g = p.g;
          final b = p.b;
          final a = p.a;
          p
            ..r = b
            ..g = g
            ..b = r
            ..a = a;
        }
      }
      return tempImage.toUint8List();
    }
  } else if (numChannels == 3) {
    if (order == ChannelOrder.bgr) {
      final tempImage = inPlace ? this : clone();
      for (final p in tempImage) {
        final r = p.r;
        p
          ..r = p.b
          ..b = r;
      }
      return tempImage.toUint8List();
    }
  }

  return toUint8List();
}