【发布时间】:2018-05-22 21:12:30
【问题描述】:
请看下面的 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
这就是代码现在的样子,在 drop 方法上调用 resizeCanvas:
/**************************************************/
//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;
}
/**************************************************/
【问题讨论】:
-
你遇到了什么错误?
-
画布不再显示图像。它不显示任何内容。请观看短视频截图(第一次测试显示错误):screencast.com/t/vS7GZuAGPa
-
您在 JavaScript 控制台中看到任何错误吗?
-
请参阅更新。
标签: javascript dom canvas drag-and-drop processing