Есть ли способ изменить шестнадцатеричные значения на значения RGB при задании p5.js цветной элемент

#javascript #p5.js

#javascript #p5.js

Вопрос:

Я переписываю свой проект после того, как узнал, что мне пришлось использовать p5.js вместо jquery. Скрипт должен принимать входные данные средства выбора цвета HTML, которое, как я полагаю, является либо шестнадцатеричным, либо цветным элементом, и преобразовывать его в значения rgb для изменения значений обводки и заливки. Я отладил до такой степени, что знаю, что либо this.setColour, либо this.colourAlpha возвращает 255 255 255, несмотря на получение другого шестнадцатеричного значения. Большое спасибо.

 function ColourPalette() {
    //make the start colour be black
    this.selectedColour = "#000000";
    this.alpha = 1
    
    //load in the colours
    this.loadColours = function() {
        var aColour = document.getElementById("colourInput").value
        //set the selected colour to the colourInput calue with current alpha
        this.setColour(this.colourAlpha(aColour, this.alpha));
        console.log(aColour)
        console.log(this.colourAlpha(aColour, this.alpha))
        
    };
    
    this.setColour = function (color){
        this.selectedColour = color
        //set fill and stroke to selectedColour value
        fill(this.selectedColour);
        stroke(this.selectedColour);
        console.log(this.selectedColour);
        
        
        //Create hex colour string and pass it into the colourInput element
        //to make sure it is set to the currently selected colour
        var redHex = red(this.selectedColour).toString(16);
        if (redHex.length == 1) {
            redHex = "0"   redHex
        };
        
        var greenHex = green(this.selectedColour).toString(16);
        if (greenHex.length == 1) {
            greenHex = "0"   greenHex
        };
        
          var blueHex = blue(this.selectedColour).toString(16);
        if (blueHex.length == 1) {
            blueHex = "0"   blueHex
        };
        
        
        document.getElementById("colourInput").value = "#"   redHex   greenHex   blueHex;
        console.log(document.getElementById("colourInput").value)
    };
        
    // Creates a new colour with RGB values from a colour and a value from alpha
    this.colourAlpha = function(aColour, alpha){
        
        var c = color(aColour);
        console.log(c)
        return 'rgba('   [red(c), green(c), blue(c), alpha].join('.')   ')';

    }
    //call the loadColours function now it is declared
    this.loadColours();
    
    
    //Load the colour everytime the colour input is changed
    const selectElement = document.querySelector('#colourInput');
    selectElement.addEventListener('change', (event) => { this.loadColours(); });
};```
  

Ответ №1:

Вы можете выполнить преобразование из шестнадцатеричного в RGB без какого-либо кода:

Возьмите первые 2 цифры и преобразуйте их из шестнадцатеричного значения в десятичное, что даст вам значение R для RGB

Возьмите 2 средних числа шестнадцатеричного кода и преобразуйте в десятичный, это дает значение G

Преобразуйте последнее в числа, преобразуйте в десятичное число, и вы получите значение B

Например, Hex # 578955

0x57 в десятичной системе счисления = 87 (R)

0x89 в десятичной системе счисления = 137 (G)

0x55 в десятичной системе счисления = 85 (B)

итак, # 578955 в RGB — это rgb (87, 137, 85)

Ответ №2:

Я обнаружил это симпатичное решение, пытаясь решить проблему 🙂

 function changeHexaToRgba() {
  h3.style.color = input1.value;
  input2.value = h3.style.color;
}
changeHexaToRgba();  
 <h3 id="h3">Type Your Hexa Color and then click button</h3>

<input type="text" id="input1" value="#080" />

<button onclick="changeHexaToRgba()">GO</button>

<input type="text" id="input2" value="" />