Учитывая 2 цвета rgb и прямоугольную область, я хотел бы создать базовый линейный градиент между цветами. Я сделал быстрый поиск, и единственное, что мне удалось найти, это this blog entry, но пример кода, кажется, отсутствует, или, по крайней мере, это было как из этой публикации. Все что угодно помогает, алгоритмы, примеры кода, что угодно. Это будет написано на Java, но уровень отображения уже позаботился, мне просто нужно выяснить, как определить, что отображать.Создание градиентов программным путем?
ответ
Вы хотите интерполяцию между первым и вторым цветом. Интерполировать цвета легко, вычисляя одну и ту же интерполяцию для каждого из ее компонентов (R, G, B). Существует много способов интерполяции. Проще всего использовать линейную интерполяцию: просто процент р первого цвета и процент 1 - р из второго:
R = firstCol.R * p + secondCol.R * (1 - p)
Там в another question, связанные с этим.
Существуют и другие методы интерполяции, которые иногда работают лучше. Например, использование интерполяционной функции bell-shaped (sigmoidal) делает переход более плавным.
/EDIT: Ой, вы имеете в виду использование предопределенной функции. Хорошо, еще проще. Теперь в блоге, который вы связали, есть код примера в Python.
В Java вы можете использовать GradientPaint
.
Используя основные классы AWT, вы могли бы сделать что-то вроде этого:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
public class LinearGradient extends JPanel {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Color color1 = Color.RED;
Color color2 = Color.BLUE;
int steps = 30;
int rectWidth = 10;
int rectHeight = 10;
for (int i = 0; i < steps; i++) {
float ratio = (float) i/(float) steps;
int red = (int) (color2.getRed() * ratio + color1.getRed() * (1 - ratio));
int green = (int) (color2.getGreen() * ratio + color1.getGreen() * (1 - ratio));
int blue = (int) (color2.getBlue() * ratio + color1.getBlue() * (1 - ratio));
Color stepColor = new Color(red, green, blue);
Rectangle2D rect2D = new Rectangle2D.Float(rectWidth * i, 0, rectWidth, rectHeight);
g2.setPaint(stepColor);
g2.fill(rect2D);
}
}
}
Вы можете использовать встроенный в GradientPaint классе.
void Paint(Graphics2D g, Regtangle r, Color c1, Color c2)
{
GradientPaint gp = new GradientPaint(0,0,c1,r.getWidth(),r.getHeight(),c2);
g.setPaint(gp);
g.fill(rect);
}
Я пользуюсь RMagick for that. Если вам нужно идти дальше простым градиентом, ImageMagick и одна из его оболочек (например, RMagick или JMagick для Java) могут быть полезны.
Страница недоступна ........ – hyprfrcb 2015-04-13 02:26:35
Следуя на execllent ответ Дэвида Кроу, вот пример реализации Котлин
fun gradientColor(x: Double, minX: Double, maxX: Double,
from: Color = Color.RED, to: Color = Color.GREEN): Color {
val range = maxX - minX
val p = (x - minX)/range
return Color(
from.red * p + to.red * (1 - p),
from.green * p + to.green * (1 - p),
from.blue * p + to.blue * (1 - p),
1.0
)
}
- 1. peewee: создание запроса программным путем
- 2. Создание объекта ловкости программным путем
- 3. Массовое создание продуктов WooCommerce программным путем
- 4. Создание анимированных градиентов arrow
- 5. Создание градиентов цвета
- 6. SpriteKit - Создание изменяющихся градиентов
- 7. Создание хранилища градиентов
- 8. Фрагмент добавлен программным путем
- 9. Нарисовать изображение программным путем
- 10. Сделать программным обеспечением GUI программным путем?
- 11. Создание таблицы программным путем с использованием MyBatis и MySql
- 12. Создание нового пользователя подрывной деятельности программным путем с помощью C#
- 13. Создание файла XAP Silverlight истекает из кэша браузера программным путем
- 14. Установить произвольное местоположение программным путем
- 15. Scrollview не создается программным путем
- 16. Вызов организовывать импорт программным путем
- 17. Обновление свойств MSI программным путем
- 18. Скрытие значка программным путем. C#
- 19. Получить шрифт очертания программным путем
- 20. Как показать представление программным путем
- 21. Поиск определенного сеттера программным путем
- 22. Управление несколькими jdbcTemplates программным путем
- 23. Flash уменьшить линию программным путем
- 24. Добавление столбца DataGridCheckBoxColumn в DataGrid программным путем
- 25. Программным Создание кривых выживания
- 26. Создание градиентов с графическим ядром в прошивкой
- 27. Создание куба с использованием только CSS-градиентов
- 28. Видео Синтез - Создание волн, узоров, градиентов
- 29. Переключение между iPhone ViewControllers программным путем
- 30. Добавление представлений программным путем через адаптер массива
В Java 1.6 и выше, есть также LinearGradientPaint, что позволяет больше контроля над тем, как его малюют. См. Http://java.sun.com/javase/6/docs/api/java/awt/LinearGradientPaint.html – Avrom 2009-05-10 19:38:25