2013-04-17 4 views
1

, так что вопрос связан с линейными градиентами в Java, используя несколько цветов. Я ищу, чтобы получить цвет RGB в любой точке вдоль градиента. Создание градиента и рисования легко, и я могу получить фракции и цвета для тех цветов, которые я установил .....LinearGradientPaint getColor по val

Проблема у меня в том, что я хочу получить цвет RGB в любой точке вдоль градиента , , чтобы разбить его, примером приложения было бы создание и отображение градиента в некоторой JPanel с размером 255 (maxSize = 255 (см. Ниже)). в зависимости от размера JPanel (maxSize) интерполяция будет различной (большее число в maxSize приведет к более интерполированным значениям). Я хотел бы иметь возможность получить значение RGB в любом месте вдоль градиента, можно почти приравнивать его к возможности сделать следующее ...

захватить значение RGB, основываясь на местоположении в градиенте

RGB_Values = p.getColorByGradientLocation(float locationInGradient); 

или

захватить значение RGB основаны от определенного значения, где-то между Point2D начать и закончить Point2D

RGB_Values = p.getColorByValue(float value); 

например настройки кода градиентное

Point2D start = new Point2D.Float(0, 0); 
Point2D end = new Point2D.Float(0, maxSize); 
Color[] colors = {n number of colors}; 
dist[] = ((float) i/(float) colors.length); //equally distributes colors 
p = new LinearGradientPaint(start, end, dist, colors, CycleMethod.NO_CYCLE); 

Большое спасибо

+0

приветствий для редактирования на тегах .... я мог бы иметь представление о том, как разобраться в этом ... может быть не правильный путь ... пользователи StackOverflow я буду мчаться вам:) –

+0

Этот столбец (http://stackoverflow.com/questions/13307962/how-to-get-the-color-of-a-point-in-a-jpanel) может помочь. – Nolo

+0

Hi Nolo, thats to your post я выяснил ответ, опубликую как ответ –

ответ

2

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

поэтому вам нужно нарисовать линейный градиент на панели, а затем покрасить панель на изображение (без отображения ее).

BufferedImage bi = new BufferedImage(xSize, ySize, BufferedImage.TYPE_INT_RGB); 
Graphics2D g = bi.createGraphics(); 
panel.print(g); 

вам необходимо установить как изображение и панель шириной до 1, то высоту, чтобы соответствовать градиентной конец (сделать 1 ширину для скорости).

для отображения градиента вы можете захватить только 1 пиксель выключения каждой строки, а затем использовать image.getRGB (х, у), чтобы получить значение пикселей в сочетании с битовыми параметрами, например

int rgb = im.getRGB(0, i); 
r = (rgb >> 16) & 0xFF; 
g = (rgb >> 8) & 0xFF; 
b = (rgb & 0xFF); 
Color newC = new Color(r, g, b); 

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

:-)

+0

Вы просто спасите меня много неприятностей! Благодаря! – bennyl

+1

рад помочь, им нужно оптимизировать на мин. upvote! –

Смежные вопросы