上線一個顏色值轉換工具

上線一個顏色值轉換工具

HEX、RGB、RGBA、ARGB、HSL之間相互轉換

最後更新 2023/7/4 下午10:49
沙漠尽头的狼
預計閱讀 3 分鐘
分類
Blazor
標籤
.NET Blazor 顏色轉換

大家好,我是沙漠盡頭的狼。

前幾天剛上線一個顏色值轉換工具,當然這是借鑒的,可實現:

  1. HEX、RGB、RGBA、ARGB、HSL之間相互轉換;
  2. 展示了一張非常實用的CSS顏色表,可在開發時查找使用:HTML 和 CSS 顏色規範中定義的 147 種顏色名(17 種標準顏色加 130 種其他顏色)。

本文簡單列出幾處開發此工具時,相關JS程式碼與C#程式碼的翻譯對比,方便大家後續類似開發參考。

JS檔案:點這

  1. 顏色值HEX轉換

提取HEX#9A3B34中R(Red)、G(Green)、B(Blue)的色值。

JS程式碼

function parseHEX(val) {
    let color = new Color();
    try {
        let rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
        let hex = val.replace(rgx, function (m, r, g, b) {
            return r + r + g + g + b + b;
        });
        let rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
        color.r = parseInt(rgb[1], 16);
        color.g = parseInt(rgb[2], 16);
        color.b = parseInt(rgb[3], 16);
    } catch (e) {
        console.log(e)
    }
    return color;
}

C#程式碼

public static Color? ParseHEX(string hexColor)
{
    hexColor = hexColor.TrimStart('#');

    Regex regex = new(@"^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$");
    var match = regex.Match(hexColor);

    if (match?.Success == true)
    {
        int red = Convert.ToInt32(match.Groups[1].Value, 16);
        int green = Convert.ToInt32(match.Groups[2].Value, 16);
        int blue = Convert.ToInt32(match.Groups[3].Value, 16);

        return new Color(red, green, blue);
    }
    else
    {
        return null;
    }
}

2. 顏色值RGBA轉換

轉換邏輯基本同上。

JS程式碼

function parseRGBA(val) {
    let color = new Color();
    try {
        let rgba = /^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/.exec(val);
        color.r = parseInt(rgba[1]);
        color.g = parseInt(rgba[2]);
        color.b = parseInt(rgba[3]);
        color.a = parseFloat(rgba[4] || 1);
    } catch (e) {
        console.log(e)
    }
    return color;
}

C#程式碼

public static Color? ParseRGBA(string color)
{
    Regex regex = new Regex(@"^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$");
    var match = regex.Match(color);

    if (match?.Success == true)
    {
        int r = int.Parse(match.Groups[1].Value);
        int g = int.Parse(match.Groups[2].Value);
        int b = int.Parse(match.Groups[3].Value);
        if (!double.TryParse(match.Groups[4].Value, out double a))
        {
            a = 1;
        }

        return new Color(r, g, b, a);
    }

    return null;
}

透過chatGPT可以很方便的將JS程式碼翻譯為C#程式碼,做一個Blazor的工具很快,其他線上的程式語言翻譯網站都不太理想,更多情況還是需要自己人工修改。

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2024/2/29

Winform中也可以這樣做資料展示

在做winform開發的過程中,經常需要做資料展示的功能,之前一直使用的是gridcontrol控制項,今天想透過一個範例,跟大家介紹一下如何在winform blazor hybrid中使用ant design blazor中的table元件做資料展示。

繼續閱讀
同分類 / 同標籤 2024/2/29

Winform的介面也可以變好看?

前幾天跟大家介紹了在winform中使用blazor hybrid,而且還說配上blazor的UI可以讓我們的winform程式設計的更加好看,接下來我想以一個在winform blazor hybrid中繪圖的範例來進行說明,希望對你有所幫助。

繼續閱讀
同分類 / 同標籤 2024/1/7

碼坊「文章標題URL別名生成器」上線

碼坊是站長新開的一個提供網頁在線工具、跨平台桌面和手機應用的開源專案。站長將終致力於為你帶來更高效、更便捷的使用體驗。今天,站長榮幸地推出「文章標題URL別名生成器」,幫助你輕鬆創建文章標題的URL別名,提升SEO效果和用戶體驗。快來碼坊,探索更多實用工具吧!

繼續閱讀