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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение тона у изображения 
:(
    Опции темы
slip_stream
Дата 24.5.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток.

Есть ли возможность с помощью Джавы изменять тон (hue) у всей картинки целиком?

К примеру, чтобы из такой картинки:
user posted image
получить такую:
user posted image

PM MAIL   Вверх
dorogoyIV
Дата 24.5.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Цитата(slip_stream @  24.5.2008,  09:15 Найти цитируемый пост)
Есть ли возможность с помощью Джавы изменять тон (hue) у всей картинки целиком?

возможность то есть!!!
только одной строкой не отделаешься.
судя по картинкам, надо заменить желтый цвет на красный, плюс оттенки
можно написать свой фильтр цвета...

если такие маленькие картинки, то, возможно проще будет использовать несколько картинок - выделил - стала красной(поставил красную картинку), убрал выделение - стала желтой(поставил желтую картинку)
PM MAIL   Вверх
slip_stream
Дата 24.5.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(dorogoyIV @  24.5.2008,  10:23 Найти цитируемый пост)
если такие маленькие картинки, то, возможно проще будет использовать несколько картинок - выделил - стала красной(поставил красную картинку), убрал выделение - стала желтой(поставил желтую картинку)

С таким вариантом все конечно проще, но интересует именно динамическая обработка.

Цитата(dorogoyIV @  24.5.2008,  10:23 Найти цитируемый пост)
можно написать свой фильтр цвета...

Можно хотя бы имена каких-нибудь классов/интерфейсов, нужных для этой задачи? С обработкой изображений на Джаве раньше не сталкивался, поэтому буду рад, если хотя бы примерное направление укажете.

PM MAIL   Вверх
dorogoyIV
Дата 24.5.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



примерно так, фильтр доделывай под себя  smile 
Код

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class ReplaceColor2 extends JComponent
{
 private Image img, img2;

 public ReplaceColor2()
 {
  img = getToolkit().getImage("1.gif");

  RGBImageFilter rgb_f = new ColorFilter();
  img2 = createImage(new FilteredImageSource(img.getSource(), rgb_f));
 }

 public void paintComponent(Graphics g)
 {
  g.drawImage(img, 0, 0, this);
  g.drawImage(img2, img.getWidth(null), 0, this);
 }

 public static void main(String [] args)
 {
  JFrame f = new JFrame();
  f.setBounds(100, 100, 400, 300);
  f.add(new ReplaceColor2());
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

class ColorFilter extends RGBImageFilter
{
 ColorFilter()
 {
  canFilterIndexColorModel = true;
 }

 public int filterRGB(int x, int y, int rgb)
 {
  return rgb >> 2;
 }
}


Это сообщение отредактировал(а) dorogoyIV - 24.5.2008, 21:23
PM MAIL   Вверх
slip_stream
Дата 26.5.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так, с фильтром получилось, спасибо. Поставил свой фильтр в ваш код, получилось как раз то, что надо.
Но тут другая проблемка. Эти картинки должны быть иконками в дереве. Делаю следующим образом:

Рендерер для дерева:
Код

private class MyTreeCellRenderer extends DefaultTreeCellRenderer {

    public Component getTreeCellRendererComponent(JTree tree, Object value,
            boolean sel, boolean expanded, boolean leaf, int row,
            boolean hasFocus) {
        super.getTreeCellRendererComponent(tree, value, sel, expanded,
                leaf, row, hasFocus);

        final ImageIcon icon = new ImageIcon("...");
        if (...) {
            setIcon(icon);
        } else {
            setIcon(new MyIcon(icon));
        }

        return this;
    }
}


И своя реализация для иконок:
Код

private class MyIcon implements Icon {

    final ImageIcon icon;

    public MyIcon(final ImageIcon icon) {
        this.icon = icon;
    }

    public int getIconHeight() {
        return icon.getIconHeight();
    }

    public int getIconWidth() {
        return icon.getIconWidth();
    }

    public void paintIcon(Component c, Graphics g, int x, int y) {
        BufferedImage imgSrc = ((ToolkitImage) icon.getImage())
                .getBufferedImage();

        RGBImageFilter filter = new MyColorFilter();
        Image imgResult = c.createImage(new FilteredImageSource(imgSrc.getSource(),
                filter));

        g.drawImage(imgResult, x, y, c);
    }

}


Проблема: вместо иконок, на которых наложен фильтр, вижу белое поле. Не подскажете, в чем причина?
PM MAIL   Вверх
dorogoyIV
Дата 26.5.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Код

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.tree.*;

public class RenderedTree extends JFrame
{
 public RenderedTree()
 {
  JTree tree = new JTree();
  ImageIcon icon = new ImageIcon("12.gif");
  MyTreeCellRenderer renderer = new MyTreeCellRenderer(icon);
  tree.setCellRenderer(renderer);
  add(new JScrollPane(tree));
 }

 public static void main(String [] args)
 {
  JFrame f = new RenderedTree();
  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

class MyImage extends JComponent
              implements Icon
{
 ImageIcon icon;
 Image img, img2;
 RGBImageFilter filter = new ColorFilter();

 MyImage(ImageIcon icon)
 {
  this.icon = icon;
  img = icon.getImage();
  img2 = createImage(new FilteredImageSource(img.getSource(), filter));

  try
  {
   MediaTracker mt = new MediaTracker(this);
   mt.addImage(img2, 0);
   mt.waitForID(0);
  }
  catch(Exception ex){}
 }

 public int getIconHeight()
 {
  return icon.getIconHeight();
 }

 public int getIconWidth()
 {
  return icon.getIconWidth();
 }

 public void paintIcon(Component c, Graphics g, int x, int y)
 {
  g.drawImage(img2, x, y, null);
 }
}

class ColorFilter extends RGBImageFilter
{
 ColorFilter()
 {
  canFilterIndexColorModel = true;
 }

 public int filterRGB(int x, int y, int rgb)
 {
  return ((rgb & 0xff00ff00)
           | ((rgb & 0xff0000) >> 16)
           | ((rgb & 0xff) << 16));
 }
}

class MyTreeCellRenderer extends DefaultTreeCellRenderer
{
 ImageIcon icon;

 MyTreeCellRenderer(ImageIcon icon)
 {
  this.icon = icon;
 }

 public Component getTreeCellRendererComponent(JTree tree, Object value,
            boolean sel, boolean expanded, boolean leaf, int row,
            boolean hasFocus)
 {
  setIcon(sel ? icon : new MyImage(icon));
  setText(value == null ? "" : value.toString());
  setOpaque(true);
  setBackground(sel ? new Color(200, 200, 200) : null);

  return this;
 }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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