Anonymous
Почему мой код иногда влияет на imageData.data правильно, а иногда (случайно) неожиданным образом?
Сообщение
Anonymous » 10 янв 2025, 01:48
У меня есть код, который должен влиять на изображение, применяя фильтр Лапласа отдельно к верхней левой четверти и к нижней левой четверти. Но при этом иногда второе применение фильтра вместо этого влияет на правый нижний угол и иногда пропускает канал. Я хоть убей не могу понять, почему это явно недетерминировано.
Код: Выделить всё
var canvas;
var canvasImageData;
var canvasContext;
main()
let kernel = [
[0.25, 0.5, 0.25],
[0.5, -3, 0.5],
[0.25, 0.5, 0.25]
]
async function main() {
var api = await fetch('https://dog.ceo/api/breeds/image/random')
.then(response => response.json())
var image = await fetch(api.message)
.then(response => response.blob())
const imageBitmap = await createImageBitmap(image);
var canvas = document.createElement('canvas');
canvas.width = imageBitmap.width;
canvas.height = imageBitmap.height;
canvas.id = 'image-canvas';
canvasContext = canvas.getContext('2d')
canvasContext.drawImage(imageBitmap, 0, 0);
document.body.appendChild(canvas);
canvasImageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);
canvasImageData = applyLaplace(canvasImageData, 0, canvas.height / 2, 0, canvas.width / 2, canvas.width, canvas.height, kernel);
canvasImageData = applyLaplace(canvasImageData, canvas.height / 2, canvas.height, 0, canvas.width / 2, canvas.width, canvas.height, kernel);
canvasContext.putImageData(canvasImageData, 0, 0);
}
//applyLaplace(canvasImageData)
function applyLaplace(canvas, height_start, height_end, width_start, width_end, canvasWidth, canvasHeight, kernel) {
let data = new Uint8ClampedArray(canvas.data);
function pos(h, l) {
return h * canvasWidth * 4 + l * 4;
}
for (let height = height_start + 1; height < height_end - 1; height++) {
for (let width = width_start + 1; width < width_end - 1; width++) {
let sum1 = 0;
let sum2 = 0;
let sum3 = 0;
for (let kernel_height = -1; kernel_height
Подробнее здесь: [url]https://stackoverflow.com/questions/79344216/why-does-my-code-affect-the-imagedata-data-at-times-correctly-and-at-other-rand[/url]
1736462909
Anonymous
У меня есть код, который должен влиять на изображение, применяя фильтр Лапласа отдельно к верхней левой четверти и к нижней левой четверти. Но при этом иногда второе применение фильтра вместо этого влияет на правый нижний угол и иногда пропускает канал. Я хоть убей не могу понять, почему это явно недетерминировано. [code]var canvas; var canvasImageData; var canvasContext; main() let kernel = [ [0.25, 0.5, 0.25], [0.5, -3, 0.5], [0.25, 0.5, 0.25] ] async function main() { var api = await fetch('https://dog.ceo/api/breeds/image/random') .then(response => response.json()) var image = await fetch(api.message) .then(response => response.blob()) const imageBitmap = await createImageBitmap(image); var canvas = document.createElement('canvas'); canvas.width = imageBitmap.width; canvas.height = imageBitmap.height; canvas.id = 'image-canvas'; canvasContext = canvas.getContext('2d') canvasContext.drawImage(imageBitmap, 0, 0); document.body.appendChild(canvas); canvasImageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height); canvasImageData = applyLaplace(canvasImageData, 0, canvas.height / 2, 0, canvas.width / 2, canvas.width, canvas.height, kernel); canvasImageData = applyLaplace(canvasImageData, canvas.height / 2, canvas.height, 0, canvas.width / 2, canvas.width, canvas.height, kernel); canvasContext.putImageData(canvasImageData, 0, 0); } //applyLaplace(canvasImageData) function applyLaplace(canvas, height_start, height_end, width_start, width_end, canvasWidth, canvasHeight, kernel) { let data = new Uint8ClampedArray(canvas.data); function pos(h, l) { return h * canvasWidth * 4 + l * 4; } for (let height = height_start + 1; height < height_end - 1; height++) { for (let width = width_start + 1; width < width_end - 1; width++) { let sum1 = 0; let sum2 = 0; let sum3 = 0; for (let kernel_height = -1; kernel_height Подробнее здесь: [url]https://stackoverflow.com/questions/79344216/why-does-my-code-affect-the-imagedata-data-at-times-correctly-and-at-other-rand[/url]