imageRaster method

List<int> imageRaster(
  1. RasterImage image, {
  2. PosAlign align = PosAlign.center,
  3. bool highDensityHorizontal = true,
  4. bool highDensityVertical = true,
  5. PosImageFn imageFn = PosImageFn.bitImageRaster,
})

Print an image using (GS v 0) obsolete command

Implementation

List<int> imageRaster(
  RasterImage image, {
  PosAlign align = PosAlign.center,
  bool highDensityHorizontal = true,
  bool highDensityVertical = true,
  PosImageFn imageFn = PosImageFn.bitImageRaster,
}) {
  List<int> bytes = [];
  bytes += setStyles(const PosStyles().copyWith(align: align));

  final int widthPx = image.width;
  final int heightPx = image.height;
  final int widthBytes = (widthPx + 7) ~/ 8;
  final List<int> rasterizedData = toEscPosRaster(image);

  if (imageFn == PosImageFn.bitImageRaster) {
    final int densityByte =
        (highDensityVertical ? 0 : 1) + (highDensityHorizontal ? 0 : 2);
    final List<int> header = List.from(cRasterImg2.codeUnits);
    header.add(densityByte);
    header.addAll(_intLowHigh(widthBytes, 2));
    header.addAll(_intLowHigh(heightPx, 2));
    bytes += List.from(header)..addAll(rasterizedData);
  } else {
    final List<int> header1 = List.from(cRasterImg.codeUnits);
    header1.addAll(_intLowHigh(widthBytes * heightPx + 10, 2));
    header1.addAll([48, 112, 48]);
    header1.addAll([1, 1]);
    header1.addAll([49]);
    header1.addAll(_intLowHigh(widthBytes, 2));
    header1.addAll(_intLowHigh(heightPx, 2));
    bytes += List.from(header1)..addAll(rasterizedData);
    final List<int> header2 = List.from(cRasterImg.codeUnits);
    header2.addAll([2, 0]);
    header2.addAll([48, 50]);
    bytes += List.from(header2);
  }
  return bytes;
}