Получить альфа-значение от float64 - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь преобразовать значение из float64 0 в 1 в альфа-значение, которое будет использоваться внутри color.RGBA

например, color.RGBA{255, 255, 255, 255}

Теперь мне нужно изменить значение Alpha на основе примера от 0 до 1

:

...
alpha := p.Tween.Value()//returns e.g. 0.3 float64

myColor := HexToColor("#E53935")
myColor.A = 255 - uint8(alpha)

...
Update(dt) call

myColor.A = 255 - uint8(alpha)

Это моя функция для преобразования строки HEX в RGBA. Но я создаю анимацию в игре, где мне нужно постепенно затухать альфа-значение цвета.

Как вы можете видеть ниже, моё альфа-значение фиксировано.

//HexToColor("#E53935")
func HexToColor(hex string) (c color.RGBA) {
    c.A = 0xff

    errInvalidFormat := color.RGBA{255, 255, 255, 255}

    if hex[0] != '#' {
        return errInvalidFormat
    }

    hexToByte := func(b byte) byte {
        switch {
        case b >= '0' && b <= '9':
            return b - '0'
        case b >= 'a' && b <= 'f':
            return b - 'a' + 10
        case b >= 'A' && b <= 'F':
            return b - 'A' + 10
        }

        return 0
    }

    switch len(hex) {
    case 7:
        c.R = hexToByte(hex[1])<<4 + hexToByte(hex[2])
        c.G = hexToByte(hex[3])<<4 + hexToByte(hex[4])
        c.B = hexToByte(hex[5])<<4 + hexToByte(hex[6])
    case 4:
        c.R = hexToByte(hex[1]) * 17
        c.G = hexToByte(hex[2]) * 17
        c.B = hexToByte(hex[3]) * 17
    default:
        return errInvalidFormat
    }
    return
}

1 Ответ

3 голосов
/ 05 февраля 2020

Преобразование числа с плавающей точкой в ​​целое число сохраняет его входную часть. Что означает

uint8(0.1) => 0
uint8(0.9) => 0
uint8(1.0) => 1

Вы должны масштабировать диапазон 0..1 до диапазона uint перед преобразованием. Таким образом, вы можете преобразовать это так:

func alpha(f float64) uint8 {
    if f >= 1 {
        return 255
    }
    return uint8(f * 256)
}
...