Refactor viewer example
This commit is contained in:
parent
8375261eb1
commit
24875d989b
84
main.js
84
main.js
@ -39,16 +39,7 @@ let running = false;
|
|||||||
|
|
||||||
let cycleSpeed = 15.0;
|
let cycleSpeed = 15.0;
|
||||||
|
|
||||||
function loadImage(buffer) {
|
// Drawing
|
||||||
image = new PBM(buffer);
|
|
||||||
thumbnailCanvas.width = image.thumbnail.width;
|
|
||||||
thumbnailCanvas.height = image.thumbnail.height;
|
|
||||||
imageCanvas.width = image.width;
|
|
||||||
imageCanvas.height = image.height;
|
|
||||||
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawPalette() {
|
function drawPalette() {
|
||||||
const colorSize = 20; // in pixels
|
const colorSize = 20; // in pixels
|
||||||
const width = 4 * colorSize; // 4 columns
|
const width = 4 * colorSize; // 4 columns
|
||||||
@ -95,21 +86,37 @@ function drawImage(anImage, ctx) {
|
|||||||
ctx.putImageData(pixels, 0, 0);
|
ctx.putImageData(pixels, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleFile() {
|
// Image loading
|
||||||
const imageFile = this.files[0];
|
function loadImage(buffer) {
|
||||||
const reader = new FileReader();
|
image = new PBM(buffer);
|
||||||
|
thumbnailCanvas.width = image.thumbnail.width;
|
||||||
|
thumbnailCanvas.height = image.thumbnail.height;
|
||||||
|
imageCanvas.width = image.width;
|
||||||
|
imageCanvas.height = image.height;
|
||||||
|
|
||||||
reader.onload = (evt) => {
|
return image;
|
||||||
image = loadImage(evt.target.result);
|
|
||||||
drawPalette(image.palette, currentPalettePage, paletteContext);
|
|
||||||
drawImage(image.thumbnail, thumbnailContext);
|
|
||||||
drawImage(image, imageContext);
|
|
||||||
};
|
|
||||||
|
|
||||||
reader.readAsArrayBuffer(imageFile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function paletteLeft() {
|
document.getElementById('imagefile').addEventListener(
|
||||||
|
'change',
|
||||||
|
(e) => {
|
||||||
|
const imageFile = e.target.files[0];
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = (evt) => {
|
||||||
|
image = loadImage(evt.target.result);
|
||||||
|
drawPalette(image.palette, currentPalettePage, paletteContext);
|
||||||
|
drawImage(image.thumbnail, thumbnailContext);
|
||||||
|
drawImage(image, imageContext);
|
||||||
|
};
|
||||||
|
|
||||||
|
reader.readAsArrayBuffer(imageFile);
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
// Palette navigation
|
||||||
|
document.getElementById('paletteLeft').addEventListener('click', () => {
|
||||||
if (currentPalettePage === 0) {
|
if (currentPalettePage === 0) {
|
||||||
currentPalettePage = 3;
|
currentPalettePage = 3;
|
||||||
} else {
|
} else {
|
||||||
@ -118,9 +125,9 @@ function paletteLeft() {
|
|||||||
document.getElementById('palettePageLabel').innerText =
|
document.getElementById('palettePageLabel').innerText =
|
||||||
currentPalettePage + 1;
|
currentPalettePage + 1;
|
||||||
drawPalette();
|
drawPalette();
|
||||||
}
|
});
|
||||||
|
|
||||||
function paletteRight() {
|
document.getElementById('paletteRight').addEventListener('click', () => {
|
||||||
if (currentPalettePage === 3) {
|
if (currentPalettePage === 3) {
|
||||||
currentPalettePage = 0;
|
currentPalettePage = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -129,8 +136,9 @@ function paletteRight() {
|
|||||||
document.getElementById('palettePageLabel').innerText =
|
document.getElementById('palettePageLabel').innerText =
|
||||||
currentPalettePage + 1;
|
currentPalettePage + 1;
|
||||||
drawPalette();
|
drawPalette();
|
||||||
}
|
});
|
||||||
|
|
||||||
|
// Color cycling
|
||||||
function cycleColors(now) {
|
function cycleColors(now) {
|
||||||
image.cyclingRanges.forEach((range) => {
|
image.cyclingRanges.forEach((range) => {
|
||||||
if (range.active) {
|
if (range.active) {
|
||||||
@ -160,11 +168,13 @@ function animate(now) {
|
|||||||
if (running) requestAnimationFrame(animate);
|
if (running) requestAnimationFrame(animate);
|
||||||
}
|
}
|
||||||
|
|
||||||
const inputElement = document.getElementById('imagefile');
|
document
|
||||||
inputElement.addEventListener('change', handleFile, false);
|
.getElementById('cyclingSpeedSlider')
|
||||||
|
.addEventListener('input', (evt) => {
|
||||||
|
cycleSpeed = evt.target.value;
|
||||||
|
document.getElementById('cyclingSpeedLabel').innerText = cycleSpeed;
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById('paletteLeft').addEventListener('click', paletteLeft);
|
|
||||||
document.getElementById('paletteRight').addEventListener('click', paletteRight);
|
|
||||||
document.getElementById('cycleColors').addEventListener('click', () => {
|
document.getElementById('cycleColors').addEventListener('click', () => {
|
||||||
if (running) {
|
if (running) {
|
||||||
running = false;
|
running = false;
|
||||||
@ -173,19 +183,3 @@ document.getElementById('cycleColors').addEventListener('click', () => {
|
|||||||
animate();
|
animate();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
document
|
|
||||||
.getElementById('cyclingSpeedSlider')
|
|
||||||
.addEventListener('input', (evt) => {
|
|
||||||
cycleSpeed = evt.target.value;
|
|
||||||
document.getElementById('cyclingSpeedLabel').innerText = cycleSpeed;
|
|
||||||
});
|
|
||||||
|
|
||||||
fetch('/assets/TEST.LBM')
|
|
||||||
.then((response) => response.arrayBuffer())
|
|
||||||
.then((buffer) => {
|
|
||||||
image = loadImage(buffer);
|
|
||||||
drawPalette(image.palette, currentPalettePage, paletteContext);
|
|
||||||
drawImage(image.thumbnail, thumbnailContext);
|
|
||||||
drawImage(image, imageContext);
|
|
||||||
});
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user