codev / src /ink-picture /renderers /halfBlock.ts
chenbhao's picture
refactor: integrate ink-picture as source directory
7e3630c
Raw
History Blame Contribute Delete
1.04 kB
import chalk from "chalk";
import type { PixelData } from "./types.js";
const HALF_BLOCK = "\u2584";
export function renderHalfBlock(pixels: PixelData): string {
const { data, info } = pixels;
const { width, height, channels } = info;
let result = "";
for (let y = 0; y < height - 1; y += 2) {
for (let x = 0; x < width; x++) {
const topPixelIndex = (y * width + x) * channels;
const bottomPixelIndex = ((y + 1) * width + x) * channels;
const r = data[topPixelIndex] as number;
const g = data[topPixelIndex + 1] as number;
const b = data[topPixelIndex + 2] as number;
const a = channels === 4 ? (data[topPixelIndex + 3] as number) : 255;
const r2 = data[bottomPixelIndex] as number;
const g2 = data[bottomPixelIndex + 1] as number;
const b2 = data[bottomPixelIndex + 2] as number;
result +=
a === 0
? chalk.reset(" ")
: chalk.bgRgb(r, g, b).rgb(r2, g2, b2)(HALF_BLOCK);
}
result += "\n";
}
return result.slice(0, -1);
}