image method

List<int> image(
  1. RasterImage imgSrc, {
  2. PosAlign align = PosAlign.center,
})

Print an image using (ESC *) command

Implementation

List<int> image(RasterImage imgSrc, {PosAlign align = PosAlign.center}) {
  List<int> bytes = [];
  bytes += setStyles(const PosStyles().copyWith(align: align));

  final RasterImage img = imgSrc.clone();
  img.invertRgb();
  final RasterImage flipped = img.flipHorizontal();
  final RasterImage rotated = flipped.rotate270();

  const int lineHeight = 3; // highDensityVertical
  final List<List<int>> blobs = toColumnFormat(rotated, lineHeight * 8);
  for (int i = 0; i < blobs.length; i++) {
    blobs[i] = _packBitsIntoBytes(blobs[i]);
  }

  final int heightPx = rotated.height;
  const int densityByte = 1 + 32; // highDensityHorizontal + highDensityVertical
  final List<int> header = List.from(cBitImg.codeUnits);
  header.add(densityByte);
  header.addAll(_intLowHigh(heightPx, 2));

  bytes += [27, 51, 16];
  for (int i = 0; i < blobs.length; ++i) {
    bytes += List.from(header)
      ..addAll(blobs[i])
      ..addAll('\n'.codeUnits);
  }
  bytes += [27, 50];
  return bytes;
}