/
Gabryelf
/
Pixel-Orb
Обзор
Документация
Войти
/
Gabryelf
/
Pixel-Orb
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/server/utils/pixelUtils.js
90 строк
3 KB
Valeev Serj
restruct_v0.0.1
07 авг 2026, 22:50
07 авг 2026, 22:50
41f78a4
Код
Авторство
О чём код?
export function createEmptyCanvas(size, color = { r: 255, g: 255, b: 255, a: 255 }) { return new Array(size).fill(null).map(() => new Array(size).fill(null).map(() => ({ ...color })) ); } export function cloneCanvas(pixels) { return pixels.map(row => row.map(pixel => ({ ...pixel }))); } export function getPixelColor(pixels, x, y) { if (y >= 0 && y < pixels.length && x >= 0 && x < pixels[y].length) { return pixels[y][x]; } return null; } export function setPixelColor(pixels, x, y, color) { if (y >= 0 && y < pixels.length && x >= 0 && x < pixels[y].length) { pixels[y][x] = { ...color }; return true; } return false; } export function countUsedPixels(pixels) { let count = 0; for (let y = 0; y < pixels.length; y++) { for (let x = 0; x < pixels[y].length; x++) { const pixel = pixels[y][x]; if (pixel && !(pixel.r === 255 && pixel.g === 255 && pixel.b === 255)) { count++; } } } return count; } export function getPixelGrid(size) { const grid = []; for (let i = 0; i <= size; i++) { grid.push(i); } return grid; } export function resizeCanvas(pixels, newSize) { const oldSize = pixels.length; const newPixels = createEmptyCanvas(newSize); for (let y = 0; y < Math.min(oldSize, newSize); y++) { for (let x = 0; x < Math.min(oldSize, newSize); x++) { if (pixels[y] && pixels[y][x]) { newPixels[y][x] = { ...pixels[y][x] }; } } } return newPixels; } export function getUniqueColors(pixels) { const colorMap = new Map(); for (let y = 0; y < pixels.length; y++) { for (let x = 0; x < pixels[y].length; x++) { const pixel = pixels[y][x]; if (pixel) { const key = `${pixel.r},${pixel.g},${pixel.b},${pixel.a}`; if (!colorMap.has(key)) { colorMap.set(key, { ...pixel, count: 0 }); } colorMap.get(key).count++; } } } return Array.from(colorMap.values()).sort((a, b) => b.count - a.count); } export function isPixelTransparent(pixel) { return pixel && pixel.a < 255; } export function mixColors(c1, c2, ratio = 0.5) { return { r: Math.round(c1.r * (1 - ratio) + c2.r * ratio), g: Math.round(c1.g * (1 - ratio) + c2.g * ratio), b: Math.round(c1.b * (1 - ratio) + c2.b * ratio), a: Math.round(c1.a * (1 - ratio) + c2.a * ratio) }; }