imageCellDimensions function

(int, int) imageCellDimensions(
  1. Image image, {
  2. int? maxColumns,
  3. int? maxRows,
})

Determines the approximate cell dimensions for displaying an image.

Implementation

(int columns, int rows) imageCellDimensions(
  img.Image image, {
  int? maxColumns,
  int? maxRows,
}) {
  // Assume a cell is roughly 2:1 pixel ratio (e.g., 8×18 font).
  const double cellAspect = 0.45; // width/height per cell
  final imageAspect = image.width / image.height;
  var columns = (image.height * cellAspect * imageAspect).ceil();
  var rows = image.height ~/ 18 + 1; // ~18px per row

  if (maxColumns != null && columns > maxColumns) {
    final scale = maxColumns / columns;
    columns = maxColumns;
    rows = (rows * scale).ceil();
  }

  final effectiveMaxRows = maxRows ?? _defaultMaxRows;
  if (rows > effectiveMaxRows) {
    final scale = effectiveMaxRows / rows;
    rows = effectiveMaxRows;
    columns = (columns * scale).ceil();
  }

  return (columns.clamp(1, 200), rows.clamp(1, 100));
}