2016-11-17 6 views
1

Я создаю в функции preload массив изображений, которые я хочу использовать позже. Однако, когда я хочу использовать высоту и ширину свойств изображения, тип не определен. Есть какой-нибудь способ бросить или что-то в javascript?Массив изображений P5.js

Я пытался создать новый образ, но я пропускаю свойства изображения, пример:

var images = new Array(); 
function preload() {  
images.push(loadImage("image0.jpg")); 

var img=loadImage("image1.jpg"); 
var aspect = img.height/img.width; // Here I successfully get the image properties 
images.push(img); 
} 

function setup() { 
createCanvas(1000, 600); 
var imgNum = parseInt(random(0, images.length - 1), 10); 
var img1 =images[parseInt(imgNum, 10)]; 
var aspect = img1.height/img1.width; // Here img1 has undefined type so the value img1.height is undefined too. 

      console.log("value: "+aspect); 
    image(images[imgNum], 0, 0); 
    console.log(img1); 
} 

поэтому значение img1.height не определено. Я предполагаю, что интерпретатор потерял тип, поэтому есть способ восстановить тип и информацию? что-то вроде приведения в java или C++?

Однако, если не изменить запрос свойств изображения, я могу распечатать изображение, но каждое изображение имеет свое значение, и я не могу изменить его размер.

function setup() { 
createCanvas(1000, 600); 
var img1 =images[parseInt(imgNum, 10)]; 
image(img1, 0, 0); 
} 
+0

Скорее всего, метод 'loadImage()' или изображение 'src' является неправильным. Это означает, что вы создаете новые объекты Image(), но они имеют только значение по умолчанию, так как в них ничего не загружается. –

+0

Нет, это изображение, я могу показать его на холсте, что потеряно, его свойства «img1.height/img1.width», но я могу визуализировать изображение, проблема в том, что я могу получить соотношение сынок изображения в разных размерах. – aburbanol

ответ

1

Попробуйте сократить разрыв. Что происходит, когда вы это делаете?

function preload() { 
    var img = loadImage("image0.jpg"); 
    console.log(img.height); 
} 

Если это не определено, вы знаете, что что-то не так с этим расположением изображения. Проверьте местоположение и орфографию. Просмотрите вкладку сети ваших инструментов разработчика в своем веб-браузере, чтобы убедиться, что файл загружается.

Что происходит, когда вы просто запускаете это?

var x = parseInt(random(100, width), 10); 
console.log(x); 

Какая ценность x? Это то, чего вы ожидаете?

Аналогично, какое значение это оценивает?

parseInt(imgNum, 10) 

Если это имеет смысл, а затем перейти к этой линии:

var img1 =new p5.Image(images[parseInt(imgNum, 10)]); 

Почему вы это делаете? Массив images должен содержать экземпляры p5.Image. Эта линия не имеет никакого смысла. Вы должны быть в состоянии сделать что-то еще:

var img1 = images[2]; 

Обратите внимание, что я жестко закодировал индекс. Начните с этого только для целей тестирования.

Обратите внимание, что эти вопросы больше для вас, чтобы задать себе вопрос. Это процесс отладки проблемы, и это то, что вы должны делать, когда у вас есть такие проблемы. Попытайтесь изолировать проблему, выяснив, какие части кода работают. Затем скопируйте эти части, чтобы создать MCVE, что поможет вам задать более конкретный вопрос. Удачи.

+0

Я также попробовал harcoded, как я объясняю в своем вопросе, но он все еще не определен. Я знаю, что проблема uis подобна «var img1 = new p5.Image (изображения [parseInt (imgNum, 10)]); потому что он потерял свой тип, поэтому я могу получить свойства. Но, возможно, я делал что-то неправильно, я также пытался использовать «images = []» вместо массива. – aburbanol

+0

@aburbanol Как я уже сказал, эта линия не имеет смысла.В массиве уже хранятся экземпляры 'p5.Image'. Вам никогда не придется вручную создавать новый экземпляр. Проверьте свою сетевую вкладку, чтобы убедиться, что файл изображения загружен правильно. –

+0

yes Я изменяю его для этого "var img1 = images [parseInt (imgNum, 10)];" и да, изображения загружаются, но он не распознает его как экземпляр p5.Image. Я редактирую свой пост с изменением taht, чтобы он работал, но все же Если я проверю тип, не определено – aburbanol