Пожалуйста, посмотрите на следующий код P5.
Цель этого небольшого приложения - перетаскивать изображение на холст, изменяя его размер в соответствии с шириной и высотой «загруженного» изображения.
/**************************************************/
//GENERAL
var canvas;
//IMAGE
var img;//image
var imgW;//image width
var imgH;//image height
/**************************************************/
function setup(){
canvas = createCanvas(710, 400);//initial canvas size
canvas.drop(gotFile);
}
/**************************************************/
function draw(){
background(0);
if(img){
image(img, 0, 0);
imgW = img.width;
imgH = img.height;
if(imgW > 0 && imgH > 0){
resizeCanvas(imgW, imgH);
}
}
fill(255);
text(imgW + ", " + imgH, 10, 10);
}
/**************************************************/
//
function gotFile(file){
if (file.type === 'image') {
img = createImg(file.data).hide();
}
}
/**************************************************/
function mouseClicked(){
if(img){
if(imgW > 0 && imgH > 0){
resizeCanvas(imgW, imgH);
}
}
}
Использование draw()
: один раз изображениебыл загружен успешно (по крайней мере, отображая его), я назначаю его ширину и высоту для переменных imgW
и imgH
.Затем следует изменение размера холста ... что приводит к ошибке, размер холста совпадает с размером загруженного изображения (установлен на Developer Tools
), но ничего не отображается.
Использование mouseClicked()
:При отключении изменения размера холста на draw()
и нажатии на холст изменение размера происходит идеально, показывая изображение.
Приложение должно работать без щелчка, это должно быть автоматическое изменение (размер холста) после удаленияизображение.
ОБНОВЛЕНИЕ
Это то, что я вижу на консоли при сбросе Ошибка, полученная на консоли:
Uncaught RangeError: Maximum call stack size exceeded
at Array.map (<anonymous>)
at p5.Color._parseInputs (p5.js:44096)
at new p5.Color (p5.js:43147)
at p5.color (p5.js:42827)
at p5.Renderer2D.background (p5.js:50315)
at p5.background (p5.js:44288)
at draw (sketch.js:21)
at p5.redraw (p5.js:52435)
at p5.resizeCanvas (p5.js:51826)
at draw (sketch.js:30)
ОБНОВЛЕНИЕ 2
Вот как теперь выглядит код, вызывая resizeCanvas для метода drop:
/**************************************************/
//GENERAL
var canvas;
//IMAGE
var img;
var imgW;
var imgH;
var z;
/**************************************************/
function setup(){
canvas = createCanvas(710, 400);
canvas.drop(gotFile);
}
/**************************************************/
function draw(){
background(0);
//
if(img){
imgUpdate();
}
//debug
fill(255);
text(imgW + ", " + imgH, 10, 10);
}
/**************************************************/
function gotFile(file){
if (file.type === 'image') {
img = createImg(file.data).hide();
}
while (!img) {
}
createP("Uploaded");
if(img)
{
imgUpdate();
resizeCanvas(imgW, imgH);
}
}
/**************************************************/
function mouseClicked(){
if(img)
{
if(imgW > 0 && imgH > 0)
{
resizeCanvas(imgW, imgH);
}
}
}
/**************************************************/
function imgUpdate()
{
image(img, 0, 0);
imgW = img.width;
imgH = img.height;
}
/**************************************************/