Время выполнения для создания пикселя по пикселям в GWT очень медленно. Для следующего кода цикл 2D для вызовов с «cpa.set (...)» очень медленный.GWT Обработка пикселов в холсте ужасно медленная
...
RootPanel.get().add(canvas);
context = canvas.getContext2d();
ImageData id = context.createImageData(canvasWidth, canvasHeight);
CanvasPixelArray cpa = id.getData();
for (int y=0; y<canvasHeight; y++){
for (int x=0; x<canvasWidth; x++){
cpa.set(y*canvasWidth*4 + x*4 + 0,r);
cpa.set(y*canvasWidth*4 + x*4 + 1,g);
cpa.set(y*canvasWidth*4 + x*4 + 2,b);
cpa.set(y*canvasWidth*4 + x*4 + 3,a);
}
}
context.putImageData(id, 0, 0);
Например, с холстом 100x100 требуется 10 секунд. Я видел в некоторых других сообщениях javascript here, показывающих, что может быть более эффективным использование отдельного буфера массива в цикле for, а затем просто установите массив ImageData равным этому буферу, но GWT, похоже, не позволяет это с CanvasPixelArray , вы можете установить только один пиксель за раз в GWT, а не копировать весь буфер массива пикселей в CanvasPixelArray или ImageData.
Любые идеи для эффективного манипулирования пикселями с холстом GWT?
Спасибо.
GWT связанные холст материал мертв простой (CanvasPixelArray это просто тип оверлея ничего в нем). Должно быть так же быстро, как это делать в vanilla JS. Вы пробовали использовать тот же код в vanilla JS для сравнения производительности? – Strelok
Да, когда я заменяю код манипуляции пикселями с JS (используя JSNI GWT, как описано здесь [http://www.onaluf.org/en/entry/13]), он мгновенно загружает страницу. (Поскольку версия Java настолько ужасно медленная, я не использую точный метод для сравнения производительности. GWT Java - ~ 10 секунд, GWT JSNI мгновен) – aez
Вы используете скомпилированную версию? То есть, вы не работаете в DevMode? DevMode может быть заведомо медленным для таких вещей. –