Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX: Как манипулировать точками изображения? / 25 сообщений из 49, страница 1 из 2
16.03.2012, 17:25:50
    #37708909
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Тут написано, что такое возможно, но в JavaFX 2.0 SDK API в классе Image я не нашёл метода, подобного "platformImage", который изпользует автор.
...
Рейтинг: 0 / 0
16.03.2012, 17:42:18
    #37708941
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
У вас статья про JavaFX 1.x, причем уже там platformImage был deprecated.
...
Рейтинг: 0 / 0
19.03.2012, 09:23:17
    #37711223
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Blazkowicz, А что взамен?
...
Рейтинг: 0 / 0
19.03.2012, 11:36:57
    #37711425
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
2skywriter

К сожалению, эта полезная функциональность ожидается к добавлению только в 2.2 ( вторая половина 2012 )

Вот цитата из багтрекера, что хотят вынести в открытое АПИ

1) Render a scene to an (opaque) platform image
2) Create an Image object from a platform image
3) Convert a JavaFX Image object to a BufferedImage
4) Convert a BufferedImage to a JavaFX Image object

We need to formalize this API and implement it in such a way that the core JavaFX module doesn't include a reliance on Swing / AWT / Java2D

Используя нон-паблик, можно и сейчас ухитриться, но это чревато - код может стать нерабочим в любой момент.
...
Рейтинг: 0 / 0
19.03.2012, 15:19:57
    #37711863
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Вот отстой... а я уже хотел было начать на JavaFX новый проект...
...
Рейтинг: 0 / 0
19.03.2012, 15:25:07
    #37711878
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
skywriterВот отстой... а я уже хотел было начать на JavaFX новый проект...
И зачем вам пиксели в векторном движке?
...
Рейтинг: 0 / 0
19.03.2012, 15:41:25
    #37711912
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Blazkowicz, отображать и обновлять в темпе поступления данных радиолокационную развёртку. Пробовал отображать квадратиками 2x2 - визир тормозит (даже под Windows, с изпользованием D3D), т.к. число узлов графа становится около 1 млн.
...
Рейтинг: 0 / 0
19.03.2012, 15:47:37
    #37711922
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
skywriterBlazkowicz, отображать и обновлять в темпе поступления данных радиолокационную развёртку. Пробовал отображать квадратиками 2x2 - визир тормозит (даже под Windows, с изпользованием D3D), т.к. число узлов графа становится около 1 млн.
А зачем считывать данные непосредственно из сцены? Можно просто завести свой растровый Image и работать с ним. А его выводить на JavaFX.
...
Рейтинг: 0 / 0
19.03.2012, 15:49:53
    #37711930
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Проблема явно не в скорости отрисовки.

Зачем стараться отрисовывать 1000000 элементов, если они заведомо не влезут в 1920х1200 ( или получится монотонная заливка ) ?

Может, отрисовывать только основные ( 1000 точек JavaFX2 потянет на 60фпс )

Многопоточность задействована?
...
Рейтинг: 0 / 0
19.03.2012, 16:19:51
    #37711981
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
skywriterBlazkowicz, отображать и обновлять в темпе поступления данных радиолокационную развёртку. Пробовал отображать квадратиками 2x2 - визир тормозит (даже под Windows, с изпользованием D3D), т.к. число узлов графа становится около 1 млн.

Подход неверный.

Неважно какая скорость поступления данных, скорость обновления картинки на экране которую замечает человеческий глаз примерно 24 кадра в секунду. Т.е. нет смысла делать чаще.

Картинка на формочке имеет меньшее разрешение чем миллион пикселей наверна. Возможно ты по нескольку раз один и тот же пиксел меняешь что надо исправить.

Положить картинку и менять в ней точки это значит бесполезно тратить ресурсы.

Для рисования в жабе можно переопределить метод paint и вызывать invalidate вместо принудительной перерисовки, в примерах от JDK есть 2D рисование. Оно не тормозит с градиентами и анимацией. Т.е. там нет никаких проблем, можно запустить и посмотреть, разобрать код.

Я не раз такое встречал, надо просто выяснить где двойная работа происходит и исправить.
...
Рейтинг: 0 / 0
19.03.2012, 16:25:16
    #37711989
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
1024Неважно какая скорость поступления данных, скорость обновления картинки на экране которую замечает человеческий глаз примерно 24 кадра в секунду. Т.е. нет смысла делать чаще.
Это сильно зависит от обстоятельств. Для динамической картинки на глаз можно различить и 60 и 100 fps.
...
Рейтинг: 0 / 0
19.03.2012, 16:31:33
    #37712010
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Уж во всяком случае, быстрее 60 кадров в секунду точно смысла нет.
...
Рейтинг: 0 / 0
19.03.2012, 16:35:49
    #37712019
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Blazkowicz1024Неважно какая скорость поступления данных, скорость обновления картинки на экране которую замечает человеческий глаз примерно 24 кадра в секунду. Т.е. нет смысла делать чаще.
Это сильно зависит от обстоятельств. Для динамической картинки на глаз можно различить и 60 и 100 fps.

24 кадра это стандарт для тв и кино. Для вывода графика или датчиков вполне достаточно.
...
Рейтинг: 0 / 0
19.03.2012, 16:41:18
    #37712028
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
102424 кадра это стандарт для тв и кино.
...для ТВ и кино двадцати летней давности. Современные телевизоры показывают 60-100Hz минимум. При этом ещё делают межкадровую интерполяцию для низкочастотного ТВ. Разница видна невооруженным глазом.
А 24 кадра это минимальный порог при котором человек начинает воспринимать движущуюся картинку как плавную анимацию.

1024Для вывода графика или датчиков вполне достаточно.
В данной задаче я бы отрисовывал в растровый буфер при поступлении данных. А буфер бы сбрасывал в JavaFX, с частотой на которой всё рендерится.
...
Рейтинг: 0 / 0
19.03.2012, 16:55:59
    #37712064
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Blazkowicz, растр предполагается 1024x1024, т.е. будет весить 4 мб. Радиолокационная развёртка обновляется посекторно, полный круг за 4 секунды. FPS нужно обеспечить не ниже 10 Гц. Получается, каждую секунду будет создаваться и выбрасываться не менее 40 мб данных. Насколько это эффективно?
...
Рейтинг: 0 / 0
19.03.2012, 17:03:05
    #37712077
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
skywriterBlazkowicz, растр предполагается 1024x1024, т.е. будет весить 4 мб.
4Мб кучу не нагнут. А можно ещё VolatileImage подъюзать и держать буфер в видюхе.

skywriterРадиолокационная развёртка обновляется посекторно, полный круг за 4 секунды. FPS нужно обеспечить не ниже 10 Гц. Получается, каждую секунду будет создаваться и выбрасываться не менее 40 мб данных.
Где логика? Зачем вам создавать новый буфер на каждый фрейм? Почему не хватает одного буфера, как во всём нормальном UI?
...
Рейтинг: 0 / 0
19.03.2012, 17:10:34
    #37712095
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Blazkowicz, насколько я понял, единственный способ загнать буфер на сцену, это такой .
Здесь каждый раз при отрисовке обновленённого буфера создаётся новый объект Image,
который при создании копирует содержимое потока.
Отсюда при 10 fps выбрасывается 40 мбайт/сек.
...
Рейтинг: 0 / 0
19.03.2012, 17:21:54
    #37712123
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
skywriterBlazkowicz, насколько я понял, единственный способ загнать буфер на сцену, это такой .
Здесь каждый раз при отрисовке обновленённого буфера создаётся новый объект Image,
который при создании копирует содержимое потока.
Отсюда при 10 fps выбрасывается 40 мбайт/сек.

1. жавафх на данном этапе использовать нельзя. Они до 3-й версии ещё несколько раз поменяют АПИ и сломают обратную совместимость
2. начать надо с поиска узкого места. Вывод на экран не является узким местом. Чтобы в этом убедиться сделай в paint закраску квадрата 1024х1024 рандомными цветами и вызывай в цикле invalidate 10 раз в секунду.
3. растровые форматы типа жпег используют сжатие. Использовать их для вывода графиков значит бесполезно гробить ресурсы.
...
Рейтинг: 0 / 0
19.03.2012, 17:46:42
    #37712184
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
skywriterBlazkowicz, насколько я понял, единственный способ загнать буфер на сцену, это такой .
Здесь каждый раз при отрисовке обновленённого буфера создаётся новый объект Image,
который при создании копирует содержимое потока.
Отсюда при 10 fps выбрасывается 40 мбайт/сек.

Ваша правда. Публичного API таки нет. Ни в Paint, ни в Image. Только backdoor:
Image.impl_fromExternalImage(buffer)
...
Рейтинг: 0 / 0
19.03.2012, 17:52:06
    #37712195
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
В чём проблема держать данные в чистом виде, а перерисовывать смещение точек?

2000 объектов, 60 ФПС, пара процентов нагрузки ( установлена JavaFX 2.1.17 beta )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
import java.util.Random;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class JavaFXApplication43 extends Application {

    final int N = 2000;
    final int WIDTH = 1200;
    final int HEIGHT = 800;
    Random rand;
    
    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("JavaFX 2");
        
        StackPane root = new StackPane();
        rand = new Random();        
        
        final ObservableList<Rectangle> data = FXCollections.observableArrayList();
        
        for(int i = 0; i < N; i++){
            
            data.add(new Rectangle(1, 1));
        }
        
        
        Timeline t = new Timeline();
        
        t.getKeyFrames().addAll(
                
                new KeyFrame(Duration.ZERO),
                new KeyFrame(Duration.INDEFINITE)
        );
        
        t.playFromStart();
        
        t.currentTimeProperty().addListener(new InvalidationListener(){

            @Override
            public void invalidated(Observable arg0) {
        
                for(Rectangle r : data){
                    
                    double x = r.getTranslateX();
                    double y = r.getTranslateY();
                    
                    x += 2 * Math.signum(rand.nextInt());
                    y += 2 * Math.signum(rand.nextInt());
                                        
                    r.setTranslateX(x);
                    r.setTranslateY(y);
                }
            }        
        });
        
        root.getChildren().addAll(data);
        
        primaryStage.setScene(new Scene(root, WIDTH, HEIGHT));
        primaryStage.show();
    }
}
...
Рейтинг: 0 / 0
19.03.2012, 17:53:42
    #37712200
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
1024 жавафх на данном этапе использовать нельзя. Они до 3-й версии ещё несколько раз поменяют АПИ и сломают обратную совместимость

Это ещё что за откровения св. Иоанна? :))
...
Рейтинг: 0 / 0
19.03.2012, 18:07:16
    #37712233
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
Также следует упомянуть, что оптимальным для подобных задач ( хотя и сейчас абсолютно не напряжно ) будет использование нового компонента Canvas ( к сожалению, тоже только в 2.2 )

JavaFX JiraDescritpion: We would like to have a JavaFX feature similar to HTML5 Canvas.
Priority: Critical
Fix version: 2.2
...
Рейтинг: 0 / 0
19.03.2012, 20:02:26
    #37712384
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
tolyanchik,

+1
...
Рейтинг: 0 / 0
19.03.2012, 20:08:22
    #37712391
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
tolyanchikВ чём проблема держать данные в чистом виде, а перерисовывать смещение точек?
Имхо, как-то не просто будет сигнал на объекты разложить. Хотя надо посмотреть на то что должно получится в итоге.
...
Рейтинг: 0 / 0
20.03.2012, 11:05:48
    #37712971
skywriter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: Как манипулировать точками изображения?
tolyanchikВ чём проблема держать данные в чистом виде, а перерисовывать смещение точек?

2000 объектов, 60 ФПС, пара процентов нагрузки ( установлена JavaFX 2.1.17 beta )

Хороший пример! Не знал, что можно так обновлять сцену.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX: Как манипулировать точками изображения? / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]