开启辅助访问      
收藏本站

站内搜索

搜索
热搜: 下载 1.20 1.21

Minecraft(我的世界)苦力怕论坛

[开发教程] Java实现颜色渐变算法

发表于 2024-6-6 12:55:03 | 显示全部楼层 |阅读模式 IP:福建省
package org.example;

import java.awt.Color;

public class ColorGradient {

    public enum GradientType {
        LINEAR,
        HSV
    }

    public static Color interpolate(GradientType type, Color color1, Color color2, float t) {
        switch (type) {
            case LINEAR:
                return linearInterpolation(color1, color2, t);
            case HSV:
                return hsvInterpolation(color1, color2, t);
            default:
                throw new IllegalArgumentException("Unknown gradient type: " + type);
        }
    }

    private static Color linearInterpolation(Color color1, Color color2, float t) {
        int r = (int) (color1.getRed() + (color2.getRed() - color1.getRed()) * t);
        int g = (int) (color1.getGreen() + (color2.getGreen() - color1.getGreen()) * t);
        int b = (int) (color1.getBlue() + (color2.getBlue() - color1.getBlue()) * t);
        int a = (int) (color1.getAlpha() + (color2.getAlpha() - color1.getAlpha()) * t);
        return new Color(r, g, b, a);
    }

    private static Color hsvInterpolation(Color color1, Color color2, float t) {
        float[] hsv1 = Color.RGBtoHSB(color1.getRed(), color1.getGreen(), color1.getBlue(), null);
        float[] hsv2 = Color.RGBtoHSB(color2.getRed(), color2.getGreen(), color2.getBlue(), null);
        float h = (hsv1[0] + (hsv2[0] - hsv1[0]) * t);
        float s = (hsv1[1] + (hsv2[1] - hsv1[1]) * t);
        float v = (hsv1[2] + (hsv2[2] - hsv1[2]) * t);
        return Color.getHSBColor(h, s, v);
    }

    public static void main(String[] args) {
        Color color1 = new Color(255, 0, 0); // Red
        Color color2 = new Color(0, 0, 255); // Blue
        float t = 0.5f; // Midpoint

        Color interpolatedColor = interpolate(GradientType.LINEAR, color1, color2, t);
        System.out.println("Linear Interpolation: " + interpolatedColor);

        interpolatedColor = interpolate(GradientType.HSV, color1, color2, t);
        System.out.println("HSV Interpolation: " + interpolatedColor);
    }
} image.png 以上代码实现了线性渐变和HSV渐变两种算法,HSV渐变看起来会更加平滑


苦力怕论坛,感谢有您~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-6-26 11:38

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号