Add getCellColorFirstPoint function

This commit is contained in:
tisilent
2023-09-19 21:58:08 +08:00
parent 27fd011e35
commit feb75a7f4d
+26 -16
View File
@@ -1160,35 +1160,34 @@ export function injectSharedRendererTests(ctx: ISharedRendererTestContext): void
await ctx.value.proxy.write('\x1b[A');
await ctx.value.proxy.scrollLines(-2);
await ctx.value.proxy.blur();
await pollFor(ctx.value.page, () => getCellColor(ctx.value, 1 , 24), [0, 0, 0, 255]);
if (frameDetails) {
const cellSize = {
width: frameDetails.decoded.width / frameDetails.cols,
height: frameDetails.decoded.height / frameDetails.rows
};
// First point of cell
const x = Math.floor((1 - 1/* 1- to 0-based index */) * cellSize.width);
const y = Math.floor((24 - 1/* 1- to 0-based index */) * cellSize.height);
const i = (y * frameDetails.decoded.width + x) * 4/* 4 channels per pixel */;
const firstPoint = Array.from(frameDetails.decoded.data.slice(i, i + 4)) as [number, number, number, number];
await pollFor(ctx.value.page, () => firstPoint, [0, 0, 255, 255]);
}
const rows = await ctx.value.proxy.rows;
await pollFor(ctx.value.page, () => getCellColor(ctx.value, 1 , rows), [0, 0, 0, 255]);
await pollFor(ctx.value.page, () => getCellColor(ctx.value ,1 , rows, CellColorPosition.FIRST), [0, 0, 255, 255]);
});
});
}
enum CellColorPosition {
CENTER = 0,
FIRST = 1
}
/**
* Gets the color of the pixel in the center of a cell.
* @param ctx The test context.
* @param col The 1-based column index to get the color for.
* @param row The 1-based row index to get the color for.
*/
function getCellColor(ctx: ITestContext, col: number, row: number): MaybeAsync<[red: number, green: number, blue: number, alpha: number]> {
function getCellColor(ctx: ITestContext, col: number, row: number, position: CellColorPosition = CellColorPosition.CENTER): MaybeAsync<[red: number, green: number, blue: number, alpha: number]> {
if (!frameDetails) {
return getFrameDetails(ctx).then(frameDetails => getCellColorInner(frameDetails, col, row));
}
return getCellColorInner(frameDetails, col, row);
switch (position) {
case CellColorPosition.CENTER:
return getCellColorInner(frameDetails, col, row);
case CellColorPosition.FIRST:
return getCellColorFirstPoint(frameDetails, col, row);
}
}
let frameDetails: { cols: number, rows: number, decoded: IImage32 } | undefined = undefined;
@@ -1214,6 +1213,17 @@ function getCellColorInner(frameDetails: { cols: number, rows: number, decoded:
return Array.from(frameDetails.decoded.data.slice(i, i + 4)) as [number, number, number, number];
}
function getCellColorFirstPoint(frameDetails: { cols: number, rows: number, decoded: IImage32 }, col: number, row: number): [red: number, green: number, blue: number, alpha: number] {
const cellSize = {
width: frameDetails.decoded.width / frameDetails.cols,
height: frameDetails.decoded.height / frameDetails.rows
};
const x = Math.floor((col - 1/* 1- to 0-based index */) * cellSize.width);
const y = Math.floor((row - 1/* 1- to 0-based index */) * cellSize.height);
const i = (y * frameDetails.decoded.width + x) * 4/* 4 channels per pixel */;
return Array.from(frameDetails.decoded.data.slice(i, i + 4)) as [number, number, number, number];
}
const COLORS_16_TO_255 = [
'#000000', '#00005f', '#000087', '#0000af', '#0000d7', '#0000ff', '#005f00', '#005f5f', '#005f87', '#005faf', '#005fd7', '#005fff', '#008700', '#00875f', '#008787', '#0087af',
'#0087d7', '#0087ff', '#00af00', '#00af5f', '#00af87', '#00afaf', '#00afd7', '#00afff', '#00d700', '#00d75f', '#00d787', '#00d7af', '#00d7d7', '#00d7ff', '#00ff00', '#00ff5f',