Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эффект смещения в graphics2d 
:(
    Опции темы
oson
Дата 18.11.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 3.3.2004
Где: Севастополь

Репутация: нет
Всего: 1



Подскажите пожалуйста как в graphics2d сделать эффект смещения в глубину.
То есть предмет в том месте где перекрывается более близким объектом должен иметь меньше ширину линий, прозрачность. То есть чтобы был виден слегка.
Какое то решение есть для этого готовое? Или хотя бы подход.
PM MAIL   Вверх
mstalker26
Дата 18.11.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 4.7.2009

Репутация: 3
Всего: 11



Копнуть в сторону java.awt.AlphaComposite? Первое что пришло в голову.
--------------------
Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
PM   Вверх
mgarin
Дата 24.11.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 3



Я не совсем понял, что вам нужно

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

Т.е. сам объект должен быть прозрачен и он перекрывает другие? 
Или тот что его накрывает должен быть прозрачен?


Вот простой пример с разными вариациями AlphaComposite, посмотрите его:
Код
public class ImageIntersectTransparent extends JFrame
{
    private ImageIcon icon1 = new ImageIcon ( getClass ().getResource ( "icons/intersect/1.jpg" ) );
    private ImageIcon icon2 = new ImageIcon ( getClass ().getResource ( "icons/intersect/2.png" ) );

    private int i = 0;
    private List<Integer> list = new ArrayList<Integer> ();

    public ImageIntersectTransparent () throws HeadlessException
    {
        super ();

        list.add ( AlphaComposite.CLEAR );
        list.add ( AlphaComposite.SRC );
        list.add ( AlphaComposite.DST );
        list.add ( AlphaComposite.SRC_OVER );
        list.add ( AlphaComposite.DST_OVER );
        list.add ( AlphaComposite.SRC_IN );
        list.add ( AlphaComposite.DST_IN );
        list.add ( AlphaComposite.SRC_OUT );
        list.add ( AlphaComposite.DST_OUT );
        list.add ( AlphaComposite.SRC_ATOP );
        list.add ( AlphaComposite.DST_ATOP );
        list.add ( AlphaComposite.XOR );

        getContentPane ().setLayout ( new BorderLayout () );
        getContentPane ().add ( new ImagePanel () );

        getContentPane ().add ( new JButton( "+" )
        {
            {
                addActionListener ( new ActionListener()
                {
                    public void actionPerformed ( ActionEvent e )
                    {
                        if ( i < list.size ()-1 )
                        {
                            i++;
                        }
                        else
                        {
                            i = 0;
                        }
                        getContentPane ().repaint ();
                    }
                } );
            }}, BorderLayout.SOUTH );

        setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
        setSize ( 500, 500 );
        setLocationRelativeTo ( null );
        setVisible ( true );
    }

    private class ImagePanel extends JComponent
    {
        public ImagePanel ()
        {
            super ();
        }

        public void paint ( Graphics g )
        {
            Graphics2D g2d = ( Graphics2D ) g;

            g2d.drawImage ( icon1.getImage (), 5, 5, icon1.getImageObserver () );

            g2d.setComposite ( AlphaComposite.getInstance ( list.get ( i ), 0.5f ) );
            g2d.drawImage ( icon2.getImage (), 55, 55, icon2.getImageObserver () );
        }
    }

    public static void main ( String[] args )
    {
        new ImageIntersectTransparent ();
    }
}


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

Это сообщение отредактировал(а) mgarin - 24.11.2010, 11:49
PM MAIL WWW ICQ   Вверх
mgarin
Дата 24.11.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 2
Всего: 3



P.S. Вот иконки к примеру

Это сообщение отредактировал(а) mgarin - 24.11.2010, 11:50

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  icons.rar 21,87 Kb
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.