powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / AffineTransform Можно ли смасштабировать не весь холст?
13 сообщений из 13, страница 1 из 1
AffineTransform Можно ли смасштабировать не весь холст?
    #39297665
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, такой вопрос, можно ли смасштабировать не весь холст, в смысле, что часть изображения должна масштабироваться, а часть нет. Например, рисуем на холсте сетку, соответственно при масштабировании все фигуры увеличиваются(их линии утолщаются), а линии сетки должны оставаться в 1 пиксель. Как этого добиться или так не получится?
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297676
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, если мне не изменяет склероз, то нужно взять VolatileImage (для пущщей производительности), отрисивать туда вашу фигуру и применить трансформацию. А затем уже результат отрисовать на холст.

Но зачем это делать самому при наличии JavaFX или хотя бы JGraphT мне не понятно.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297687
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont know,
векторные изображения (толщина не масштабируется) делаются так:
- все фигуры и сетка в том числе в массиве
- устанавливаются масштаб или окно выводав объект Координаты.
- при отрисовке в методе Draw локальные координаты канвас в пикселях получаются
Код: java
1.
lokPoint = Koord.GetLokal(Фигура.Pnt(i))


Все фигуры и БД работают в глобальных.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont know,
второй вариант - сетку рисовать отдельно каждый раз при выводе фигур.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297910
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Не умею я JavaFX, да и думаю что не принципиально это, что использовать, Swing или JavaFX, суть одна и та же.

Поясню ситуацию(по прошлой моей теме здесь)
Есть класс канвы, на которой я рисую(просто унаследованный от JPanel). Так же есть класс(класс документа), унаследованный от абстрактного класса, содержащего метод draw(). Соответственно в методе paintComponent() я пытаюсь рисовать всё это своё хозяйство.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); 
        Graphics2D g2d = (Graphics2D) g;
        
        setBackground(new Color(225, 225, 225));
        
        if(drawable != null) {

            g2d.translate(drawOrigin, drawOrigin);
            
            //Dimension d = drawable.getSize();
            //g2d.setColor(Color.GRAY);
            //g2d.drawRect(0, 0, (int)Math.round(d.width*scaleFactor), (int)Math.round(d.height*scaleFactor));
            drawable.draw(g2d, scaleFactor);
        }
}



и метод рисования в моём классе. Здесь я пытаюсь нарисовать свой "документ"
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Override
    public void draw(Graphics g, double scaleFactor) {
        Graphics2D g2d = (Graphics2D) g;
        
        
        g2d.scale(scaleFactor, scaleFactor);
        //size.setSize((int)Math.round(size.width * scaleFactor), 
        //             (int)Math.round(size.height * scaleFactor));
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, size.width, size.height);
        //g2d.setColor(Color.GRAY);
        //g2d.drawRect(0, 0, size.width, size.height);
        
        
        g2d.dispose();
    }


Теперь загвоздка: например, раз рисуем документ, нужно нарисовать рамку вокруг него. Хорошо, рисуем, но если рисовать его в методе draw(), то при масштабировании, будет масштабироваться и толщина рамки, что мне не нужно, она должна всегда быть тонкой. Если рисовать её в paintComponent, то рамка рисуется как-то не корректно, с одной стороны линия есть, с другой нет. Тоже самое, подозреваю, будет и с сеткой.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297919
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont knowSwing или JavaFX, суть одна и та же.
Вообще нет. JavaFX работает сразу с вектором, и подобные проблемы там решаются на много проще. При этом очевидно что ваша задача заточена под вектор.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297934
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
+1
I dont know,
вы писали что лупу сделать раз плюнуть?
Код: java
1.
g2d.scale(scaleFactor, scaleFactor);


в растровом виде выше это просто.
А в вектре требуются пересчёты координат.
.....
Сетка у вас независима от объектов рисования?
Значит рисуя её последней она будет верная. только не масштабируйте её.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297945
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont knowнапример, раз рисуем документ,
делай все сообщения со скринами. Это графика, а не музыка и литература.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297985
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Даже не знаю как ответить. В целом сетка не зависима от того что нарисовано на холсте. Размер ячейки задаётся общим размером, например 1мм и переводится в пиксели, далее уже масштабируется, когда крутим колёсиком мыши. Так же к цзлам сетки привязан курсор, т.е при движении курсора, нарисованный курсор прыгает только по узлам этой сетки.

Вот пара скриншотов:
1. если рисовать рамку документа в самом методе отрисовки документа(в методе draw())


2. Если рисовать извне(из метода paintComponent холста), в целом вроде нормально, как-то кривовато


Думается мне, что те вещи, которые не должны масштабироваться, лучше рисовать извне, т.е в методе paintComponent()

P.S. чтобы было удобнее, добавил код проекта во вложение, потому что не знаю, какие участки кода кода захочется народу посмотреть :)
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39297996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont know2. Если рисовать извне(из метода paintComponent холста), в целом вроде нормально, как-то кривовато
пока IMHO всё нормально. Это рамка 3D ))))
Ещё больше толщину + цвет серый + сетка и запости сюда.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39298014
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Не, так не по фен-шую, белый квадратик всё равно обрамить тоненькой рамочкой надо, чтобы красивше было )
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39298030
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont knowPetro123,
Не, так не по фен-шую, белый квадратик всё равно обрамить тоненькой рамочкой надо, чтобы красивше было )
AFAIK если на 1 пиксель, то там в самой операционке траблы были. Насколько помню.
Второй вариант - поставь цвет красный и нарисуй рамку ПОСЛЕ ...последней.
Ждём.
...
Рейтинг: 0 / 0
AffineTransform Можно ли смасштабировать не весь холст?
    #39298034
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I dont know,
внутри документа что нить нарисуй для теста. А то не видно принцип масштабирования.
Что это растр а не вектор.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / AffineTransform Можно ли смасштабировать не весь холст?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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