Я создаю что-то, что использует processing.js для работы с изображениями JPEG, перетаскиваемыми с компьютера пользователя в элемент canvas.В настоящее время это работает так:
canvas.addEventListener("dragenter", dragEnter, false);
canvas.addEventListener("dragexit", dragExit, false);
canvas.addEventListener("dragover", dragOver, false);
canvas.addEventListener("drop", drop, false);
...
function drop(evt) {
...
var files = evt.dataTransfer.files;
handleFiles(files);
}
function handleFiles(files) {
var file = files[0];
reader = new FileReader();
reader.onloadend = handleReaderLoadEnd;
reader.readAsDataURL(file);
}
function handleReaderLoadEnd(evt) {
var p=Processing.getInstanceById('canvas');
p.setImage( evt.target.result );
}
... в JS, затем в сценарии .pjs, прикрепленном к холсту (<canvas datasrc="/assets/draw.pjs" id="canvas" width="978" height="652">
):
PImage imported_image;
void setImage(s) {
imported_image = requestImage(s , "" , image_loaded_callback());
}
Все работает нормальнодо сих пор.Теперь проблема: я думал бы, что обратный вызов на requestImage (или loadImage в этом отношении) произойдет, когда изображение будет готово к отображению.Однако, если я сделаю это:
void image_loaded_callback() {
image(imported_image, 0, 0);
}
, то ничего не отобразится.Я могу обойти проблему, ожидая 10 кадров, а затем рендеринг, но это кажется очень уродливым (и, вероятно, ненадежным) решением.Есть ли лучшие способы сделать это?Любая помощь высоко ценится!